Подтвердить что ты не робот

Инициализировать свойство класса анонимной функцией

Почему невозможно инициализировать свойство функции при объявлении свойства в 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";
      };
    }
  }
?>
4b9b3361

Ответ 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.