考虑这个示例代码
<?php
class MyAwesomeClass {
public $myawesomeproperty = 'test';
public function __construct() {
$self = new stdClass();
$self->myawesomeproperty = "hello guys!";
}
}
$test_obj = new MyAwesomeClass();
echo '<pre>';
var_export( $test_obj );
echo '</pre>';
?>
它应该设置&#34; myawesomeproperty&#34;到一个新的字符串,所以var_export显示&#34;你好!&#34;在输出中。
我实际得到的是
MyAwesomeClass::__set_state(array(
'myawesomeproperty' => 'test',
))
显然构造函数不会将任何东西保存到实际对象中。
为什么会这样?我错过了什么?
答案 0 :(得分:1)
您正在设置名为$self
的本地变量的属性。如果要更改对象的属性,请改为使用$this
:
<?php
class MyAwesomeClass {
public $myawesomeproperty = 'test';
public function __construct() {
$this->myawesomeproperty = "hello guys!";
}
}
$test_obj = new MyAwesomeClass();
echo '<pre>';
var_export( $test_obj );
echo '</pre>';
?>
答案 1 :(得分:1)
您正在构造函数中创建一个不同的对象($ self)。你没有做任何事情,所以当php离开函数范围时,对象将从内存中删除。
要覆盖附加到当前函数范围的对象的属性,请使用$this->myawesomeproperty="Hello Guys";