Intereting Posts
HTML-адрес электронной почты, отправленный через PHP, рассматриваемый как спам в Gmail доступ к частной переменной из функции-члена в PHP запуск php-скрипта (php-функция) в linux bash Какой хэш используют сеансы PHP при хранении идентификатора? Автоматическое заполнение полей ввода формы из базы данных с помощью AJAX Насколько полезен PHP CodeSniffer? Обеспечение соблюдения норм стандартов в целом? Включить shell_exec () на сервере wamp Чтобы получить много тегов для эффективного ответа от Postgres по PHP Автозаполнение Jquery с php-источником Шифрование паролей joomla Zend_Cache: после загрузки кэшированных данных кодировка символов кажется испорченной Лучшая практика для проведения обновления Magento? Проблемы с сохранением сеанса, получение PHP Неустранимая ошибка: Исключение выбрано без рамки стека Неизвестно в строке 0 PHP: Как получить все возможные комбинации массива 1D? различия между require и require_once в php

Вызов статического метода из переменной массива объекта

В PHP вы можете вызвать статический метод класса из экземпляра объекта (который содержится в массиве) следующим образом:

$myArray['instanceOfMyClass']::staticMethod(); // works 

Но по какой-то причине, когда я использую $this переменную $this , я получаю ошибку синтаксического анализа. Например:

 $this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR 

Чтобы проиллюстрировать, что я имею в виду:

 class MyClass{ public static function staticMethod(){ echo "staticMethod called\n"; } } $myArray = array(); $myArray['instanceOfMyClass'] = new MyClass; $myArray['instanceOfMyClass']::staticMethod(); // works class RunCode { private $myArray; public function __construct(){ $this->myArray = array(); $this->myArray['instanceOfMyClass'] = new MyClass; $this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR } } new RunCode; 

Любые идеи о том, как обойти это?

Фактически вы можете использовать «->» для вызова статического метода:

 $this->myArray['instanceOfMyClass']->staticMethod(); 

Это действительно интересная проблема, это может быть даже ошибка в самом PHP.

Для работы используйте принцип KISS.

 class RunCode { private $myArray; public function __construct(){ $this->myArray = array(); $this->myArray['instanceOfMyClass'] = new MyClass; $instance = $this->myArray['instanceOfMyClass'] $instance::staticMethod(); } } 

Надеюсь это поможет!

Вам придется разбить один лайнер с помощью временной переменной, например

 $inst = $this->myArray['instanceOfMyClass']; $inst::staticMethod() 

Это один из многих случаев, когда компилятор PHP недостаточно умен, чтобы понимать вложенные выражения. В последнее время PHP-разработчики улучшают, но еще предстоит сделать.