2010-11-26 21 views

答えて

40

参照渡しです。関数内の変数は、呼び出しコンテキストからの変数と同じデータを指す。

function foo(&$bar) 
{ 
    $bar = 1; 
} 

$x = 0; 
foo($x); 
echo $x; // 1 
+1

.. – cambraca

+2

ので、それは一種の真の、 'グローバルの$ var' – Alex

+4

@Alexを使用したときと同様に動作しますが、大きな二つがあります違い:1)非グローバルスコープ(他の関数を呼び出す関数)で動作し、2)変数の名前を知っている内部関数に依存しない。関数の引数としての参照は、デバッグが容易で、グローバル変数よりもエラーが起こりにくいものの、同じ懸念事項(変数の予期しない変更など)の一部が依然として適用されます。 – Matthew

5

パラメータとして変数への参照を受け入れます。

これは、関数がパラメータに対して行う変更(たとえば、)が、呼び出し元関数によって渡された変数に影響することを意味します。

15

基本的には、機能内で$varを変更すると、外側に変更されます。たとえば:

$var = 2; 

function f1(&$param) { 
    $param = 5; 
} 

echo $var; //outputs 2 
f1($var); 
echo $var; //outputs 5 
+0

ありがとう、非常にはっきりと書かれています。 –

2

変数(& $ fooという)の前にアンパサンド(&)があなたの代わりに参照することにより、変数を渡したいことを指定する値でパスを上書きします。例えば

あなたはこれを持っている場合:

function doStuff($variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '1' because you passed the value, but it doesn't alter the original variable 

doStuff(&$foo); // this is deprecated and will throw notices in PHP 5.3+ 
echo $foo; 
// output is '2' because you passed the reference and php will alter the original variable. 

それは両方の方法を動作します。

function doStuff(&$variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '2' because the declaration of the function requires a reference. 
+5

呼び出し時の参照渡し 'doStuff(&$ foo)'を使用する2番目の例は推奨されておらず、使用しないでください。 – Matthew

+0

お役立ち情報ありがとう! –

+2

私のコメントは余分なコードで誤解を招くかもしれません。 'doStuff(&$ variable){}'は問題ありませんが、 'doStuff(&$ variable);'は呼び出し時にはありません。 – Matthew

2

pass by referenceです。

Cのポインタに慣れている場合は、ポインタを変数に渡すようなものです。

(Cのように)逆参照する必要はありません。それはブーイング関数内で変更されたときに

+0

+1。これがCでポインタが意味するものであれば上記を読んだときに不思議でした。あなたの確認で今は完璧な意味があります。 – Kaji

2

あなたは更新されるの$ VARの実際の値を意味し、リファレンスとしての$ VARを渡している例が

function boo(&$var) { 
    $var = 10; 
} 

$var = 20; 
echo $var; //gets 20 
boo($var); 
echo $var //gets 10 
-1

任意の関数は、アンパサンドで始まる場合(&) 、それはReference関数による呼び出しを意味します。値の代わりに変数への参照を返します。

私は `foo`、私の例では、` bar`を使用して起動するんだ
function reference_function(&$total){ 
    $extra = $total + 10; 
} 

$total = 200; 
reference_function($total) ; 
echo $total; //OutPut 210 
+0

これは、受け入れられた答えの多かれ少なかれ直接コピーであるように見えるときに、これが何を追加するかを説明してください(最後から2番目の行にタイプミスがあります)。 – DaveP

+0

私は自分の答えを改善しました。 直接変数を変更する必要があるかどうかを説明しようとしていますが、上記のように呼び出すことができます。 ありがとう – Anujayweb

関連する問題