2012-10-18 28 views
1

編輯:如果我在某個對象上應用某些業務邏輯,然後我需要克隆它以在其他某個過程中橫向移動。重新應用對象的新實例或克隆現有對象的業務邏輯(它有很高的機會得到不同的結果)會更有效率嗎?但是如果我做$ a = $ b,通過引用傳遞的對象是不夠的。未設置通過引用PHP

讓我們這個例子:

$a = new test(); 
$b = $a; 
$b->setSomeProp('test'); 
$a->setSomeProp('failed'); 
echo $b->getSomeProp(); //returns 'failed' 

$a = new test(); 
$b = unserialize(serialize($a)); 
$b->setSomeProp('test'); 
$a->setSomeProp('failed'); 
echo $b->getSomeProp(); //returns 'test' 

有沒有更好的辦法來替代引用?

+0

對象始終是PHP中的引用。總是!請參閱我記錄的http://nativephp.com/archives/4教程。你不需要引用來處理PHP 5+中的對象(甚至不記得這是什麼時候添加的)。所以你不能取代價值。您只需將引用變量別名更改爲別的。不是原來的。 – CodeAngry

+1

你的第二個剪輯[打印失敗](http://codepad.org/TxCyCtxa);儘管目前還不清楚你想用這個完成什麼。 – NullUserException

+0

@NullUserException我試圖連載一個var。這段代碼只是一個例子,我在問題中指出解決方案必須應用於對象。 – Udan

回答

0

我可以看到你的代碼已經改變。你在找什麼是clone。 試試這個:

$b = clone $a; 
0

是的。您需要unset the reference

只需使用unset($b)

+0

我不想解除($ b)...我需要兩個 – Udan

0

參見:PHP global or $GLOBALS

從@Artefacto: 「裏面一個功能,如果你想取消設置一個全局變量,你必須使用未設置($ GLOBALS [ 'varname的']) ,不是全局的$ varname; unset($ varname);.「