2011-08-15 47 views
1

一旦我傳遞一個函數內的變量作爲參考,如果我以後訪問它,它仍然是一個參考或..?引用或變量?

實施例:

function one(){ 
    $variables = array('zee', 'bee', 'kee'); 
    $useLater =& $variables; 
    two($variables); 
} 

function two($reference){ 
    foreach($reference as $variable){ 
     echo 'reference or variable, that is the question...'; 
    } 
} 

在功能two();是變量這裏先前設置$變量的引用或創建一個新的元件(在存儲器中,我想..)?

另外,一個,是有沒有辦法來檢查,如果變量通過引用或不通過? (如:is_reference();

+1

不管答案是什麼:在通話時通過引用不推薦使用。 –

+0

@Felix,現在什麼是「傳遞參考」的替代品? – jolt

+0

你可以很容易地測試這個,OP。 –

回答

1

變量只被引用傳遞(在PHP的當前版本),如果你明確地使用&$foo引用傳遞它。同樣,當聲明一個變量爲一個新變量時,例如$foo = $bar,$ foo將是一個對$ bar的引用,直到該值發生變化。然後它是一個新的副本。

有很多方法在這裏檢測參考,也許檢查一些。 (爲什麼你需要這樣做是未知的,但仍然存在)。

http://www.php.net/manual/en/language.references.spot.php

2

作爲函數的兩個以上所定義將使用的$refernce新副本。

要使用你需要定義函數的兩個類似這樣的原始變量:

function two(&$ref) { 
    //> Do operation on $ref; 
} 
0

如果希望該函數的參數是一個參考,你必須寫一個&那裏。

唯一的例外應該是對象。

1

變量。看:

function one(){ 
    $variables = array('zee', 'bee', 'kee'); 
    $useLater =& $variables; 
    two($variables); 
    var_dump($variables); 
} 

function two($reference){ 
    $reference = array(); 
} 

array(3) { [0]=> string(3) "zee" [1]=> string(3) "bee" [2]=> string(3) "kee" } 

所以改變它two() diesn't在one()改變它,所以它的變量。

1

發送給兩個變量()是一個新元素。如果要訪問變量的引用,請使用兩個(& $變量);

在回答你的第二個查詢,沒有標準函數測試一個變量是一個參考,但是,下面的鏈接應該給你一些指針在檢查變量是否引用或不是。

PHP: check if object/array is a reference

0

只是嘗試一下自己:

<?php 

$variables = array('zee', 'bee', 'kee'); 
one($variables); 

foreach($variables as $variable2){ 
     echo "original: ".$variable2."<br>"; 
    } 


function one(&$variables){ 

    $useLater =& $variables; 
    two($variables); 

    foreach($variables as $variable2){ 
     echo "function one: ".$variable2."<br>"; 
    } 

} 

function two(&$reference){ 
    foreach($reference as $variable){ 
     echo "function two: ".$variable."<br>"; 
    } 
    $reference[0] = 'lee'; 
} 

?> 

現在離開了& -sign看看會發生什麼。您需要每次明確地告訴PHP如何打算傳遞所討論的變量。