为什么在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";
};
}
}
?>
答案 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代码的字符串。