У меня есть класс с именем 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
Другой подход основан на комментариях.
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();
}
}
Все, что я вижу, что вы упускаете здесь, — это объявление вашей переменной и ее обработку как статической в самом классе.
public static $weddingNameVariable;
if($compare....)
self::$weddingNameVariable;
Это базовый бит, который вы хотите изменить, но есть несколько более сложный бит, который не верен: вы рассматриваете нестатическую функцию как статическую. Поэтому вам может потребоваться изменить функцию updated_variables, чтобы она была статической. Я также вижу, что вы пытаетесь сделать $ post-> post_date сразу после объявления глобального $ post; но без инициализации, чтобы иметь какое-либо значение. Если вы пытаетесь получить доступ к данным, отправленным с клиента, попробуйте $ _POST [‘some-key-here’], который определен PHP и доступен везде.
После того, как все это уладится, вы можете либо заставить вашу функцию updated_variables вернуть новое заданное вами значение, либо вызвать функцию на предыдущую строку, а затем получить доступ к переменной с помощью DB_Bookings :: $ weddingNameVariable.
Я заметил пару вещей здесь. Первый, 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.
}
}
Возможно, это не тот подход ООП, который вы ищете, поскольку вы можете использовать статическую переменную, но если вам нужно часто менять это значение, вам будет лучше управлять им с помощью других опций, на мой взгляд.