2011-09-05 14 views
5

Zastanawiam się w jaki sposób można zmienić nazwę właściwości obiektu w PHP, npPHP - Jak zmienić nazwę właściwości obiektu?

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

to nie działa w PHP5.3, (donno o wcześniejszych wersjach), ponieważ nie będzie odniesienie $obj->a przypisany $obj->b i więc, wyłączając $obj->a, wartość $obj->b będzie pusta. Masz jakieś pomysły?

+1

Wersja PHP 5.3.4 po wykonaniu swój kod $ obj: obiektu (klasy stdClass) # 1 (1) {[ "b"] => int (10)} – Fivell

+2

To nie jest odniesienie. Zobacz [tę odpowiedź] (http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129) po szczegóły dotyczące PHP obsługuje pisanie zmiennych i odwołań. .. – ircmaxell

Odpowiedz

5

Twój kod działa poprawnie, $obj->b jest 10 po wykonaniu: http://codepad.org/QnXvueic

po wyłączeniu trybu $obj->a, wystarczy usunąć właściwość, nie dotykać wartości. Jeśli wartość jest używana przez inną zmienną, pozostaje niezmieniona w zmiennej porządkowej.

+0

To jest przydatne. Oszczędza to konieczności refleksji i innych wymyślnych rzeczy, jak w innych językach. –

+0

dzięki! jest zmęczony, dlaczego dostaję NULL po wyzerowaniu właściwości = 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

To nie jest zmiana nazwy, to kopia. Zajmie to dwukrotność pamięci -> a. Po prostu "zmiana nazwy" jest często czymś ważnym dla programistów zajmujących się dużymi zbiorami danych. – John