Инициализировать свойство класса анонимной функцией
Почему невозможно инициализировать свойство функции при объявлении свойства в php? Следующий снипп приводит к ошибке : синтаксическая ошибка: неожиданный T_FUNCTION
<?php
class AssignAnonFunction {
private $someFunc = function() {
echo "Will Not work";
};
}
?>
Но вы можете инициализировать свойство строкой, числом или другими типами данных?
Edit:
Но я могу назначить функцию свойству в методе __construct(). Выполняется следующее:
<?php
class AssignAnonFunctionInConstructor {
private $someFunc;
public function __construct() {
$this->someFunc = function() {
echo "Does Work";
};
}
}
?>
Ответы
Ответ 1
Потому что он не реализован в PHP.
http://www.php.net/manual/en/language.oop5.properties.php. Цитата:
Они (свойства) определяются с помощью одного из ключевые слова общедоступные, защищенные или частный, за которым следует обычная переменная декларация. Это выражение может включают инициализацию, но это инициализация должна быть постоянной ценность - то есть она должна быть способна быть оценивается во время компиляции и не должно зависят от информации о времени выполнения в для оценки.
Вы не можете инициализировать такие свойства, как функции, функции не являются постоянными значениями. Поэтому мой оригинальный ответ "он не реализован".
Почему это не реализовано? То, что я могу только догадываться - это, вероятно, довольно сложная задача, и никто не активизировал ее. И/или может не хватить спроса на такую функцию.
Ответ 2
Закрытия не существуют в PHP до PHP 5.3 (последняя версия). Убедитесь, что у вас есть PHP 5.3, если вы хотите это сделать.
В более ранних версиях вы можете дублировать эту функцию с помощью функции create_function(), примерно так:
$someFunc = create_function($args,$code);
$someFunc();
Где $args - это строка, форматированная как "$ x, $y, $z", а $code - строка вашего кода PHP.