使用匿名函数初始化类属性
当你在php中声明属性的时候,为什么不可能初始化一个属性? 以下snippit导致一个分析错误:语法错误,意外的T_FUNCTION
<?php class AssignAnonFunction { private $someFunc = function() { echo "Will Not work"; }; } ?>
然而,你可以初始化一个属性为string,数字或其他数据types?
编辑:
但是我可以将函数分配给__construct()方法中的属性。 以下工作:
<?php class AssignAnonFunctionInConstructor { private $someFunc; public function __construct() { $this->someFunc = function() { echo "Does Work"; }; } } ?>
因为它没有在PHP中实现。
http://www.php.net/manual/en/language.oop5.properties.php 。 引用:
它们(属性)通过使用关键字public,protected或private之一来定义,然后是一个正常的variables声明。 这个声明可能包括一个初始化,但是这个初始化必须是一个常量值 – 也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息来进行评估。
你不能像这样初始化属性,函数不是常量值。 因此,我原来的答复是“不实施”。
为什么不执行? 我只能猜测 – 这可能是一个相当复杂的任务,没有人加紧实施它。 和/或可能没有足够的需求这样的function。
在PHP 5.3(最新版本)之前,不存在闭包。 确保你有PHP 5.3如果你想这样做。
在较早的版本中,可以使用create_function()函数来重复此function,有点像这样:
$someFunc = create_function($args,$code); $someFunc();
其中$ args是格式化为“$ x,$ y,$ z”的string,$ code是您的PHP代码的string。