0

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

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

但为什么?谁能解释为什么第一个例子是错误的?为什么我必须在函数中添加“(object)NULL”行?

4

1 回答 1

4

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

来自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
}
?>
于 2013-09-20T13:17:17.150 回答