Инициализировать свойство класса с помощью анонимной функции - PullRequest
12 голосов
/ 27 октября 2009

Почему невозможно инициализировать свойство для функции при объявлении свойства в php? Следующий фрагмент кода приводит к ошибке Parse: синтаксическая ошибка, неожиданная 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";
      };
    }
  }
?>

Ответы [ 2 ]

19 голосов
/ 27 октября 2009

Потому что это не реализовано в PHP.

http://www.php.net/manual/en/language.oop5.properties.php. Цитата:

Они (свойства) определяются с помощью одного из ключевые слова общедоступные, защищенные или private, за которым следует нормальная переменная декларация. Эта декларация может включить инициализацию, но это инициализация должна быть постоянной ценность - то есть она должна быть в состоянии оценивается во время компиляции и не должен зависит от информации во время выполнения в заказ на оценку.

Вы не можете инициализировать свойства, подобные этим, функции не являются постоянными значениями. Отсюда мой оригинальный ответ "не реализовано".

Почему это не реализовано? Это я могу только догадываться - это, вероятно, довольно сложная задача, и никто не стал ее реализовывать. И / или может быть недостаточно спроса на такую ​​функцию.

2 голосов
/ 27 октября 2009

Замыкания в PHP не существуют до PHP 5.3 (последняя версия). Убедитесь, что у вас PHP 5.3, если вы хотите это сделать.

В более ранних версиях эту функцию можно было дублировать с помощью функции create_function (), примерно так:

$someFunc = create_function($args,$code);
$someFunc();

Где $ args - строка, отформатированная как "$ x, $ y, $ z", а $ code - строка вашего кода PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...