2015-10-20 94 views
0

對象var $ c - > $ var1已在類a中更改;php class return;函數返回

var $ new_var在函數d中沒有改變; 我是一個疑惑不解的小夥子。 我的英語很差,你能理解我嗎?

<?php 
    class a{ 
     public function test() { 
      $b = new b; 
      $c = new c; 
      $b->test($c); 
      var_dump($c); 
     } 
    } 

    class b{ 
     public function test($c) { 
      $c->var1 = 2; 
      return $c; 
     } 
    } 

    class c { 
     public $var1 = 1; 
    } 

    $a = new a; 
    $a->test(); 

    function d($new_var) { 
     $new_var = 2; 
     return $new_var; 
    } 

    $new_var = 1; 
    d($new_var); 
    echo $new_var 
+0

無論您傳遞給該函數的是什麼,函數'd()'都將變量'$ new_var'設置爲值'2',您是否可以更清楚地知道您的問題?無論如何,因爲我不確定我得到您的查詢 – MaveRick

+0

但$ c已在此行更改$ b-> test($ c); –

+0

仍然無法得到這裏的問題在哪裏! – MaveRick

回答

0

您的問題是,你有這樣的功能

function d($new_var) { 
     $new_var = 2; 
     return $new_var; 
} 

如果這是真的,你可能通過不同的變量作爲參數,但後來你把這個參數並決定將其設置= 2然後返回它。 如果你想回到你通過,你應該改變它在

function d($new_var) { 
     return $new_var; 
} 

或者,如果你想類似測試一些B類的功能儘量tgus

function d($new_var) { 
    $d->new_var = $new_var; 
    return $d; 
} 

這樣你就可以訪問到您的$ new_var在返回的對象$ d

0

您期望下面的一段代碼將$new_var的值從1更改爲2,對不對?

$new_var = 1; 
d($new_var); 
echo $new_var 

唉,那不可能,因爲返回的值永遠不會分配回變量。爲了確保傳遞的變量將保留外連它傳遞到作爲參數的函數的範圍的新的價值,你需要將變量傳遞作爲參考,而不是作爲一種價值,是這樣的:

function d(&$new_var) { 
    $new_var = 2; 
    return $new_var; 
} 

注意函數簽名中變量名前面的&符號(&)。這將導致變量爲passed as a reference,以便它將保留在該函數內對其進行的任何更改。