2017-02-18 92 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";

相關問題