2011-09-05 9 views
5

私はどのように私は例えば、PHPでオブジェクトのプロパティの名前を変更することができます不思議:$obj->bに割り当てられた$obj->aの参照が存在しますので、それは(それ以前のバージョンについてdonno)、PHP5.3では動作しませんPHP - オブジェクトプロパティの名前を変更するにはどうすればいいですか?

<?php 
    $obj = new stdclass(); 
    $obj->a = 10; // will be renamed 
    $obj->b = $obj->a; // rename "a" to "b", somehow! 
    unset($obj->a); // remove the original one 

$obj->aを設定しないと、$obj->bの値はnullになります。どんなアイデアですか?あなたのコードが正しく動作

+1

PHPバージョン5.3.4 あなたのコードの$ OBJ実行後: オブジェクト(はstdClass)#1(1){[ "B"] => int型( 10)} – Fivell

+2

これは参考になっていません。変数と参照を書くPHPの詳細については、[この回答](http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129)を参照してください。 .. – ircmaxell

答えて

5

$obj->bは実行後10です:あなたは$obj->aの設定を解除すると、あなただけのプロパティを削除http://codepad.org/QnXvueic

、あなたは値に触れないでください。その値が他の変数で使用されている場合は、order変数に変更されません。

+0

それは便利です。それは、他の言語のように反射や他の派手なことをする必要がありません。 –

+0

ありがとう!プロパティーを設定解除した後にNULLが返される理由はわかりません。O –

0
<?php  
$obj = new stdclass(); 
$obj->a = 10; // will be renamed 
$obj->b = $obj->a; // rename "a" to "b", somehow! 
unset($obj->a); // remove the original one 
var_dump($obj->b); //10 Works fine 
+0

これは名前の変更ではなく、コピーです。 - > aの2倍のメモリを占有します。 「名前を変更する」と言っても、大規模なデータセットを扱う開発者にとっては、たぶん重要なことです。 – John