一尘不染

用匿名函数初始化类属性

php

在php中声明属性时,为什么无法将属性初始化为函数?以下代码片段导致 解析错误:语法错误,意外的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";
      };
    }
  }
?>

阅读 336

收藏
2020-05-26

共1个答案

一尘不染

因为它不是用PHP实现的。

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

它们(属性)是使用关键字public,protected或private之一定义的,后跟普通变量声明。该声明可以包括一个初始化,但是此初始化必须是一个常量值-
也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。

您不能像这样初始化属性,函数不是常量值。因此,我的原始答案是“未实现”。

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

2020-05-26