重複の可能性:
参照 - この記号は PHP で何を意味しますか?
&$variable
次のような関数の意味と意味は何ですか
function &SelectLimit( $sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0 )
{
$rs =& $this->do_query( $sql, $offset, $nrows, $inputarr);
return $rs;
}
重複の可能性:
参照 - この記号は PHP で何を意味しますか?
&$variable
次のような関数の意味と意味は何ですか
function &SelectLimit( $sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0 )
{
$rs =& $this->do_query( $sql, $offset, $nrows, $inputarr);
return $rs;
}
so: のように引数を渡すmyFunc(&$var);
ことは、変数が (値ではなく) 参照によって渡されることを意味します。したがって、関数内の変数に加えられた変更は、呼び出しが行われた変数を変更します。
関数名の前に置く&
と、「参照渡し」を意味します。これは少し直感に反します。できれば使用は避けたいです。アンパサンドで PHP 関数を開始するとはどういう意味ですか?
&=
or&
演算子と混同しないように注意してください。これは完全に異なります。
参照渡しの簡単なテスト:
<?php
class myClass {
public $var;
}
function incrementVar($a) {
$a++;
}
function incrementVarRef(&$a) { // not deprecated
$a++;
}
function incrementObj($obj) {
$obj->var++;
}
$c = new myClass();
$c->var = 1;
$a = 1; incrementVar($a); echo "test1 $a\n";
$a = 1; incrementVar(&$a); echo "test2 $a\n"; // deprecated
$a = 1; incrementVarRef($a); echo "test3 $a\n";
incrementObj($c); echo "test4 $c->var\n";// notice that objects are
// always passed by reference
出力:
Deprecated: Call-time pass-by-reference has been deprecated; If you would like
to pass it by reference, modify the declaration of incrementVar(). [...]
test1 1
test2 2
test3 2
test4 2
アンパサンド (「&」) は、変数の値ではなく、変数のアドレスを指定するために使用されます。これを「参照渡し」と呼びます。
したがって、「&$variable」は変数への参照であり、値ではありません。また、「function &func(...」は、変数のコピーではなく、戻り変数の参照を返すように関数に指示します。
以下も参照してください。