【问题标题】:PHP class property initiated as stdClassPHP 类属性作为 stdClass 启动
【发布时间】:2014-04-16 20:12:00
【问题描述】:

基本上我想做的就是这个

class A {

    public $prop = new stdClass;

}

PHP 告诉我我不能这样做:

PHP 解析错误:语法错误,意外的“新”(T_NEW) in - 在线 ##

那是怎么回事?我知道您基本上不能在初始化时将函数的返回值分配给属性,但是有人可以解释为什么会这样,就像技术上的东西一样。提前致谢!

【问题讨论】:

    标签: php


    【解决方案1】:

    尝试使用类构造函数:

    class A {
    
        public $prop;
    
        public function __construct(){
    
            $this->prop = new stdClass;
    
        }
    
    }
    

    PHP manual says:

    属性声明可能包括初始化,但这 初始化必须是一个常量值——也就是说,它必须能够 在编译时进行评估,并且不能依赖于运行时 信息以便进行评估。

    【讨论】:

    • 但是一个空的stdClass怎么不是一个常量呢?
    • PHP 不会检查您要实例化的内容。在这种情况下,它只是解析代码并看到您正在尝试使用仅在执行时可用的动态代码结构并退出。无论如何,stdclass 现在是否为“空”都没关系。将来可能不会。
    【解决方案2】:

    类变量必须用静态值初始化,例如

    public $prop = 7; // ok
    public $prop = 7+7; // ok - can be evaluated at compile time
    public $prop = new stdClass; // bad, dynamic result.
    public $prop = get_some_value(); //also bad, dynamic result not available at compile time
    

    【讨论】:

    • 嗯,是的,我得出了这个结论。我实际上是在问是什么原因造成的。
    • 这是一个 PHP 限制。解决它的唯一方法是使用空/默认固定值定义类变量,然后在构造函数中分配动态的东西。
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多