可以将类属性初始化为闭包数组吗?

时间:2017-06-28 19:12:39

标签: php arrays closures class-properties

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

$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)

1 个答案:

答案 0 :(得分:2)

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

 from lxml import etree
 data = open(r'C:\Users\abc\Desktop\input-xsl.xsl')
 xslt_content = data.read()
 xslt_root = etree.XML(xslt_content)
 dom = etree.parse(r'C:\Users\abc\Desktop\input-xml.xml')
 transform = etree.XSLT(xslt_root)
 result = transform(dom)
 print(result)

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

  

类成员变量称为“属性”。你也可以看到它们   引用使用其他术语,如“属性”或“字段”,但   出于本参考的目的,我们将使用“属性”。他们是   使用关键字public,protected或private之一定义,   然后是正常的变量声明。这个声明可能会   包括初始化,但这个初始化必须是一个常量   value - 也就是说,它必须能够在编译时进行评估   不得依赖于运行时信息才能进行评估。