В 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-разработчики улучшают, но еще предстоит сделать.