PHP类中的函数文字
Posted
技术标签:
【中文标题】PHP类中的函数文字【英文标题】:Function literal in PHP class 【发布时间】:2015-05-04 03:46:59 【问题描述】:请看一下这段代码:
$array = array(
'action' => function () echo "this works";
);
class Test
public $array = array(
"action" => function () echo "this doesn't";
);
第一个函数文字解析得很好,但第二个 - 类中的那个 - 触发语法错误:
解析错误:语法错误,意外的“函数”(T_FUNCTION)...
谁能给我解释一下?这是一个错误吗?
编辑:这是最新的 php:5.6.6
【问题讨论】:
这到底是哪个 PHP 版本? 属性声明只能是常量/文字。匿名函数是表达式。 使用构造函数,它会起作用,你不能在实例化时为类变量分配非文字。它们需要在构造函数中设置。 看来是我的错。显然函数字面量不是恒定的。 只是一个旁注,在 PHP7 中你会得到另一个警告:致命错误:常量表达式包含无效操作。与您当前的错误相比,它发生在下一行。 【参考方案1】:从类中它是一个属性!
属性规则:
声明可能包含初始化,但这 初始化必须是一个常数值——也就是说,它必须能够 在编译时进行评估,并且必须不依赖于运行时 信息以便进行评估。
http://php.net/manual/en/language.oop5.properties.php
【讨论】:
是的。似乎我应该更彻底地阅读文档:(仍然......这很烦人。但是谢谢! 这是一个正确的答案,但他们的措辞是模棱两可的:function () echo "this doesn't";
“取决于运行时信息”到底是怎么回事?
@georg 这完全是另一个问题。【参考方案2】:
我没有机会在 PHP 5.6.6 上测试您的代码,但我认为这段代码可以解决您的问题。
class Test
public $array;
function __construct()
$this -> array = array(
'action' => function ()
echo 'It works too';
);
$test = new Test();
$test -> array['action']();
【讨论】:
【参考方案3】:试试这个,让我知道这是否适合你
<?php
$array = array('action' => function () echo "this works"; );
class Test
public $arr;
function __construct()
$this->arr = array("action" => function () echo "this works too"; );
function getArr()
var_dump($this->arr);
var_dump($array);
$obj = new Test();
$obj->getArr();
【讨论】:
谢谢!这会起作用,但它并不能完全使我的代码更易于阅读。我可能会将数据放入全局命名空间。如果 PHP 的 OOP 想要任性,我也可以。以上是关于PHP类中的函数文字的主要内容,如果未能解决你的问题,请参考以下文章