Как создать статическую переменную и вызвать ее из другого класса? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть класс с именем 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

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Я заметил пару вещей здесь.Во-первых, 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 голосов
/ 22 мая 2018

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

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 голосов
/ 22 мая 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...