使用匿名函数初始化类属性

时间:2009-10-27 19:08:39

标签: php

为什么在php中声明属性时无法将属性初始化为函数?以下snippit导致解析错误:语法错误,意外T_FUNCTION

<?php
  class AssignAnonFunction {
    private $someFunc = function() {
      echo "Will Not work";
    };
  }
?>

然而,您可以将属性初始化为字符串,数字或其他数据类型吗?

编辑:

但我可以在__construct()方法中为属性分配一个函数。以下工作正常:

<?php
  class AssignAnonFunctionInConstructor {
    private $someFunc;

    public function __construct() {
      $this->someFunc = function() {
        echo "Does Work";
      };
    }
  }
?>

2 个答案:

答案 0 :(得分:19)

因为它没有在PHP中实现。

http://www.php.net/manual/en/language.oop5.properties.php。引用:

  

它们(属性)是通过使用其中一个来定义的   关键字public,protected或   私有,后跟一个正常变量   宣言。这个声明可能会   包括初始化,但这   初始化必须是常量   价值 - 也就是说,它必须能够   在编译时评估,但不得   依赖于运行时信息   为了评估。

您无法初始化此类属性,函数不是常量值。因此,我的原始答案“它没有实施”。

为什么没有实施?我只能猜测 - 它可能是一项相当复杂的任务,没有人加紧实施它。和/或对这样的功能可能没有足够的需求。

答案 1 :(得分:2)

在PHP 5.3(最新版本)之前,PHP中不存在闭包。如果你想这样做,请确保你有PHP 5.3。

在早期版本中,您可以使用create_function()函数重复此功能,有点像这样:

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

其中$ args是一个格式为“$ x,$ y,$ z”的字符串,$ code是PHP代码的字符串。