【问题标题】:Can PHP static class variables be defined using functions?可以使用函数定义 PHP 静态类变量吗?
【发布时间】:2012-04-20 16:29:17
【问题描述】:

用这样的变量创建一个类工作正常

class Example {
    public static $example = array('simple', 'example');
    // ... 
}

但是,如果我使用函数,在定义变量时,我得到一个unexpected '(', expecting ')' 错误:

class Example {
    public static $example = explode(' ', 'simple example');
    // ... 
}

我在没有static 关键字的情况下尝试了它,但仍然遇到同样的错误。在定义这样的类变量时是否可以使用函数?什么是替代方案?

【问题讨论】:

  • 只需创建一个命名空间并在其中放入一个全局变量.. 它将完全一样。而且你不会假装“做 OOP”。

标签: php class static static-members


【解决方案1】:

根据the documentation(强调我的):

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

【讨论】:

    【解决方案2】:

    Array 并不是一个真正的函数,而是一个 operator 文字,这就是它起作用的原因。要使用函数,只需使用 setter 或类外部即可:

    class Example {
        public static $example = null;
        // ... 
    
        public static function setE($val) {
           self::$example = $val;
        }
    }
    
    Example::$example = explode(' ', 'simple example');
    
    // or
    
    Example::setE(explode(' ', 'nudder example'));
    

    【讨论】:

    • 选择这个答案 b/c 它附带了另一种方法。谢谢:]
    • 遗憾的是,您不能以这种方式使其最终化,但如果您在其上调用一个函数,那么您不太可能真的希望它成为您即时计算的任何东西。
    【解决方案3】:

    你应该能够做到以下几点,

    public static $example = new array('simple','example');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 2010-10-17
      • 2023-03-17
      • 1970-01-01
      • 2018-11-02
      • 2021-05-02
      • 2011-05-01
      相关资源
      最近更新 更多