为什么(对象)NULL 或 new stdClass 在 PHP 函数中


why (object) NULL or new stdClass IN a php function?

谁能解释为什么这会返回错误:

$test = new myclass();
class myclass {
    private $object = (object) NULL;
    public function addmember() {
        $this->object->member1 = 'member 1';
    }
}
$test -> addmember();

。这没关系:

$test = new myclass();
class myclass {
    private $object = '';
    public function addmember() {
        $this->object = (object) NULL;// new stdClass();
        $this->object->member1 = 'member 1';
    }
}
$test -> addmember();

但是为什么?谁能解释为什么第一个例子是痛苦的?为什么我必须在函数中放置带有"(对象)NULL"的行?

类体定义中不允许使用表达式。

从 php.net:

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

例如,您不能这样做:

<?php
class A {
    public $x = 1 + 2; // < expression
}
?>

但可以这样做:

<?php
class A {
    public $x;
    public function __construct(){
        $this->x = 1 + 2;
    }
}
?>

此外,您可以通过常量值初始化类主体中的属性,该属性不需要在解析过程中计算:

<?php
class A {
    public $x = 123; // < constant value
}
?>