PHP类中能否存储箭头函数/匿名函数到变量?为何报错?
问题解答
你遇到的错误原因是:PHP类属性的默认初始化值必须是常量表达式,而匿名函数、箭头函数属于需要在运行时创建的动态表达式,不能直接作为属性的默认值写在类的属性声明里,并非不能在类中使用它们。
正确的实现方式
你可以通过类的构造函数来给属性赋值匿名函数或箭头函数,代码示例如下:
<?php class example{ var $func; var $fn; public function __construct() { // 在构造函数中赋值匿名函数 $this->func = function () { return 1 + 2; }; // 在构造函数中赋值箭头函数 $this->fn = fn() => 1 + 2; } }
调用这些变量函数
实例化类后,需要注意调用方式(避免PHP将属性调用解析为类方法调用):
$obj = new example(); echo ($obj->func)(); // 输出 3 echo ($obj->fn)(); // 输出 3
补充(PHP 8.0+ 简化写法)
如果你的PHP版本是8.0及以上,可以使用构造函数属性提升简化代码:
<?php class example{ public function __construct( public $func = null, public $fn = null ) { $this->func = function () { return 1 + 2; }; $this->fn = fn() => 1 + 2; } }
内容的提问来源于stack exchange,提问作者Rogan
相关产品推荐
相关产品推荐

