2017-02-18 4 views
0

は、新しい文字列そうでvar_exportショーに「myawesomeproperty」を設定することになっています。このサンプルコードなぜ私の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>'; 
?> 

を考えてみましょう「こんにちはみんな!」出力に表示されます。

私が実際に取得していますと、

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->"を使用しましたが、公共のプロパティでは、 今[this](http://stackoverflow.com/questions/151969/when私はあなたの答えに感謝しています。最も愚かな間違いは、Dを指すときにはっきりしている。 – L1Q

1

あなたは、コンストラクタ内の別のオブジェクト($自己)を作成しています。あなたはそれを使って何もしていないので、PHPは関数のスコープを離れるときにオブジェクトはメモリから削除されます。

彼らは長い間非推奨となり、非常にサーバー固有されている「短いオープンタグ」を使用しないでください$this->myawesomeproperty="Hello Guys";

関連する問題