2017-10-15 38 views
0
$a = some object; 
$b = another object; 
function do_some_stuff() { 
    $c = $a; 
    $b->a_property = $c; 
} 
do_some_stuff(); 
echo $b->a_property; # Undefined, becuase $c was deleted when the function exited. 

當我鍵入$b->a_property = $c時,我想讓PHP中間件做$b->a_property = $a。如果我無法直接將其分配給$a,我該怎麼做?如何將變量分配給對象,而不是對它的引用?

我實際的代碼是:

function setup() { 
    $playerHeroes = []; 
    $enemyHeroes = []; 
    foreach ($entities as $object) { 
     if ($object->team == "player") { 
      $playerHeroes[] = $object; 
     } 
     else if ($object->team == "enemy") { 
      $enemyHeroes[] = $object; 
     } 
    } 

    foreach ($playerHeroes as $object) { 
     $object->target = $enemyHeroes[array_rand($enemyHeroes)]; 
    } 
    foreach ($enemyHeroes as $object) { 
     $object->target = $playerHeroes[array_rand($playerHeroes)]; 
    } 
} 

我有點通過實體的遊戲名單,作爲要麼是對球員的球隊或者是敵人的團隊。每個英雄都必須瞄準對方球隊的英雄。當setup功能退出時,$object,$playerHeroes$enemyHeroes被破壞。 ->target屬性稍後訪問,它的null。我該如何做到這一點,以便當我將一個變量分配給一個對象的引用時,它將它分配給該對象本身?

編輯:我希望變量改變時,對象的變化,所以克隆/價值複製不是一個選項。

+0

您錯過了將這些$實體放入函數的方法。你也錯過了回報。你可以使用'global $ a,$ b;'或者將參數設置爲'do_some_stuff($ a,$ b)來執行'function setupt(&$ objectA,&$ objectB)'或者''entities''' –

+0

。 '。 – mega6382

回答

0

除了迴應@IvoP和@ mega6382的評論之外,值得一提的是,你所遇到的問題本身並不是一個「可解決的」問題。這是因爲你所遇到的是對象如何在PHP中工作的基礎。您可以在http://ca2.php.net/manual/en/language.oop5.references.php瞭解所有相關信息。

經常提到的PHP 5 OOP的一個關鍵點是「對象通過默認引用傳遞」。這並不完全正確。本節使用一些例子來整理這個一般思想。

PHP引用是一個別名,它允許兩個不同的變量 寫入相同的值。從PHP 5起,一個對象變量不包含對象本身作爲值的 。它只包含一個對象 標識符,它允許對象訪問器查找實際對象。 當一個對象被自變量發送,返回或分配給另一個變量時,這些不同的變量不是別名:它們持有 指向同一對象的標識符副本。 (帽尖到@tomzx)

你可能會做的更好,以重新構建你的代碼來處理這個,或者使用其默認行爲是一種語言調用 - 值如C或Java。

相關問題