不能在静态字段声明中使用静态函数

时间:2015-04-15 10:54:58

标签: php static-methods static-members

我在一个带有正则表达式的类中有一个静态字段。这个正则表达式需要一个静态数组中的值列表,所以我创建了一个静态函数,它返回要插入正则表达式的组(例如(a|b|c|d))。问题是,当我声明一个静态字段时,我无法调用静态函数。

我需要将函数返回的值放在字段中。

示例:

class A {
    public static function Foo()
    {
        return "Foo";
    }

    public static $Bar = "lol". self::Foo();
}

echo A::$Bar;

我得到了

Parse error: syntax error, unexpected '(', expecting ',' or ';' on line 7

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您无法使用“动态”值初始化静态属性。您只能使用文字或常量初始化它。

您还可以在manual

中看到这一点
  

与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;不允许使用表达式。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您可能不会将其初始化为另一个变量,函数返回值或对象。

如果你想使用静态函数,只需使用它:

echo A::Foo();

答案 1 :(得分:0)

不是试图以语言不允许的方式做某事,而是以一种语言允许的方式改变你的想法:

class A {
    public static function Foo()
    {
        return "lol" . self::$Bar;
    }

    public static $Bar = "Foo";
}

echo A::Foo();