PHP: $ это не доступно в необъектном контексте во включенном PHP файле - PullRequest
0 голосов
/ 22 января 2020

У меня есть класс со следующей структурой:

/**
 * @property int ticket_id
 */
class Test {
    public function __construct( $ticket_id ) {
        $this->ticket_id = $ticket_id;

        $this->register();
    }

    /**
     * Register all hooks
     */
    public function register(): void {
        add_action( 'wp_ajax_ping', array( $this, 'ping' ) );
    }

    public function ping(): void {
        require_once('ping.php');
    }
}

В моем ping.php я пытался использовать мой параметр $this->ticket_id, но я получил ошибку, что $this недоступно в не контекст объекта:

error_log($this->ticket_id);

И да, я создаю новый объект из моего класса:

new Test('123');

Почему? Я думал, что могу использовать его и в любом необходимом файле.

1 Ответ

1 голос
/ 22 января 2020

Ваша проблема:

Обычно, когда переводчик нажимает «foo. php»; оператор, он открывает указанный файл, считывает все его содержимое, заменяет бит «include» кодом из другого файла и продолжает интерпретацию ...

reference

Это означает, что включенный файл анализируется PHP перед тем, как он будет "импортирован", и поскольку он не находится в контексте class , пока не будет импортирован, когда он будет прочитан, поэтому $this неуместен.

Возможные обходные пути:

1) Поместите включенные детали в родительский класс (копировать / вставить)

2) Поставить включенные детали в их предполагаемый метод класса и использовать PHP Расширение класса для использования класса Расширения.

3) Извлечь информацию. включить и поместить его в свой собственный класс полностью. Поместите вызов include в родительский скрипт, а не в класс test. Ссылка

(вероятно, есть больше идей, как обойти вашу проблему, но лучше всего подойти к мелу - one - просто скопировать и вставить код. Если код многословный, вы можете легко скрыть его с помощью любой приличной среды IDE, закрывающей этот метод, до одной строки видимого кода.)

(С точки зрения компилятора PHP вы не сохраняете что-нибудь с include с.)

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