Как создать статическую переменную и вызвать ее из другого класса?

У меня есть класс с именем DB_Bookings, в этом классе у меня есть функция с именем updated_variables() это простой скрипт для просмотра даты опубликованного поста и изменения имени переменной соответственно.

Делая это, в моем приложении я намерен использовать переменную, и она будет динамически меняться для каждого поста в зависимости от даты создания.

Я изо всех сил пытаюсь вызвать переменные из другого класса. Пожалуйста, посмотрите мою работу ниже:

class DB_Bookings {

...

public function updated_variables() {
global $post;
$compare_date = strtotime( "2018-05-22" );
$post_date = strtotime( $post->post_date );

if($compare_date > $post_date) {
$weddingNameVariable = 'db-bookingsweddingname';

...
} else {
$weddingNameVariable = 'weddingName';
}
}

} // end DB_Bookings class

Затем в моем другом классе (в файле с именем class-db-bookings-admin.php)

class DB_Bookings_Admin {

...

public function save_metabox( $post_id, $post ) {

...

update_post_meta( $post_id, DB_Bookings::updated_variables($weddingNameVariable), $db_bookingsnew_weddingname );

...

}

} // end Class DB_Bookings_Admin

Идея заключается в том, что я могу повторить набор переменных в моем классе DB_Bookings, и он может меняться в зависимости от даты публикации (это, по сути, компенсирует унаследованные переменные, поскольку я пересматриваю код приложения).

Тем не менее, это не похоже на сохранение, и я получаю следующую ошибку

[22-May-2018 19:29:43 UTC] PHP Notice:  Undefined variable: weddingNameVariable in /var/www/html/wp-content/plugins/db-bookings/admin/class-db-bookings-admin.php on line 853

0

Решение

Другой подход основан на комментариях.

class WeddingVariables {

//add all of the variables needed to this class
//you could create getters/setters to manage this data

$variableA = "data";

//get the variable
public function get_variable_a() {
return $this->variableA;
}

//set the variable
public function set_variable_a( $value ) {
$this->variableA = $value;
}
}

//a global variable
$WeddingVariables = new WeddingVariables();

//admin class
class DB_Bookings_Admin {
public function save_metabox( $post_id, $post ) {
global $WeddingVariables; //now we can access this within this method

//get the value of a variable from the class
$someVariable = $WeddingVariables->get_some_variable();

}
}
0

Другие решения

Все, что я вижу, что вы упускаете здесь, — это объявление вашей переменной и ее обработку как статической в ​​самом классе.

public static $weddingNameVariable;
if($compare....)
self::$weddingNameVariable;

Это базовый бит, который вы хотите изменить, но есть несколько более сложный бит, который не верен: вы рассматриваете нестатическую функцию как статическую. Поэтому вам может потребоваться изменить функцию updated_variables, чтобы она была статической. Я также вижу, что вы пытаетесь сделать $ post-> post_date сразу после объявления глобального $ post; но без инициализации, чтобы иметь какое-либо значение. Если вы пытаетесь получить доступ к данным, отправленным с клиента, попробуйте $ _POST [‘some-key-here’], который определен PHP и доступен везде.

После того, как все это уладится, вы можете либо заставить вашу функцию updated_variables вернуть новое заданное вами значение, либо вызвать функцию на предыдущую строку, а затем получить доступ к переменной с помощью DB_Bookings :: $ weddingNameVariable.

0

Я заметил пару вещей здесь. Первый, updated_variables() не статический метод, хотя вы вызываете его как статический метод DB_Bookings::updated_variables(), Чтобы использовать этот метод статически, вам нужно сделать его статическим методом через public static function updated_variables(), Однако это само по себе обсуждение.

Есть много способов выполнить то, что вы хотите, но вы можете сделать это с помощью глобальной переменной.

<?php

//this is global
$weddingNameVariable = false;

class DB_Bookings {
public function updated_variables() {
global $weddingNameVariable;
//now you can read/update this variable from within this method
}
}

class DB_Bookings_Admin {
public function save_metabox( $post_id, $post ) {
global $weddingNameVariable;
//now you can read/update this variable from within this method.
}
}

Возможно, это не тот подход ООП, который вы ищете, поскольку вы можете использовать статическую переменную, но если вам нужно часто менять это значение, вам будет лучше управлять им с помощью других опций, на мой взгляд.

0
По вопросам рекламы [email protected]