为什么我的php类没有保存它的属性?

时间:2017-02-18 19:16:51

标签: php class oop

考虑这个示例代码

<?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',
))

显然构造函数不会将任何东西保存到实际对象中。

为什么会这样?我错过了什么?

2 个答案:

答案 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";