谁能解释为什么这会返回错误:
$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
}
?>