2017-02-18 90 views
0

考虑此示例代码为什么我的PHP类没有保存它的属性?

<?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>'; 
?> 

它应该这样var_export显示“myawesomeproperty”设置为一个新的字符串“好家伙!”在输出中。

我真的开始是

MyAwesomeClass::__set_state(array(
    'myawesomeproperty' => 'test', 
)) 

显然,构造函数不保存任何实际的对象。

这是怎么发生的?我错过了什么?

+0

不要使用“短打开标签”,他们早已过时,非常服务器专用。总是用'<?php'打开你的代码。 – miken32

+3

你为什么这样做'$ self = new stdClass();'? – AbraCadaver

回答

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>'; 
?> 
+0

好吧,你是对的,我错误地使用了“$ self->”,认为它会像“self ::”一样工作,但是与公共属性 now [this](http://stackoverflow.com/questions/151969/when使用自我在此)实际上完全清除了我的想法。谢谢你的回答。 D指出最愚蠢的错误非常明显 – L1Q

1

您正在创建一个不同的对象($个体经营)在构造函数中。你没有做任何事情,所以当php离开函数作用域时,这个对象将从内存中移除。

要覆盖附加到当前功能范围对象的属性,使用$this->myawesomeproperty="Hello Guys";

相关问题