Взгляните на этот код, пожалуйста:
$array = array( 'action' => function () { echo "this works"; } ); class Test { public $array = array( "action" => function () { echo "this doesn't"; } ); }
Первый литерал функции отлично разбирается, а второй – внутри класса – вызывает синтаксическую ошибку:
Ошибка анализа: синтаксическая ошибка, неожиданная функция «(T_FUNCTION) …
Может ли кто-нибудь объяснить это мне? Это ошибка?
EDIT: это последний PHP: 5.6.6
Из класса это свойство!
Правило от свойств:
Объявление может включать инициализацию, но эта инициализация должна быть постоянной величиной, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
У меня нет возможности проверить свой код на PHP 5.6.6, но я думаю, что этот код разрешает вашу проблему.
class Test{ public $array; function __construct(){ $this -> array = array( 'action' => function (){ echo 'It works too'; } ); } } $test = new Test(); $test -> array['action']();
Попробуйте это, дайте мне знать, если это сработает для вас
<?php $array = array('action' => function () { echo "this works"; }); class Test { public $arr; function __construct() { $this->arr = array("action" => function () { echo "this works too"; }); } function getArr(){ var_dump($this->arr); } } var_dump($array); $obj = new Test(); $obj->getArr();