0

我正在尝试将一些验证函数存储在静态配置数组中。将函数存储在数组中似乎可行,但是,当我将相同的代码放入类中时,它会失败。有谁知道发生了什么?

$functions = array(
     'function1' => function($echo) {
           echo $echo;
      }
);

$functions['function1']("hello world");
// Works

//----------

class A {
    public static $functions = array(
        'function1' => function($echo) {
             echo $echo;
         }
    );
}

A::$functions['function1']("hello world");
//Parse error: syntax error, unexpected 'function' (T_FUNCTION)
4

1 回答 1

2

当我使用 PHP 7 运行它时(PHP 5 也会出错),我收到一个错误,基本上是在不允许实例化类变量时表示表达式。这就是它的工作方式:

$functions = array(
    'function1' => function($echo) {
        echo $echo;
    }
);

$functions['function1']("hello world");
// Works

//----------

class A {
    public static $functions = [];
}

A::$functions['function1'] = function($echo) {
    echo $echo;
};

A::$functions['function1']("hello world");

http://php.net/manual/en/language.oop5.properties.php

类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一定义的,后跟一个普通的变量声明。这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

于 2017-06-28T19:20:31.960 回答