8

重複の可能性:
参照 - この記号は PHP で何を意味しますか?

&$variable
次のような関数の意味と意味は何ですか

function &SelectLimit( $sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0 )
{
    $rs =& $this->do_query( $sql, $offset, $nrows, $inputarr);
    return $rs;
} 
4

2 に答える 2

8

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
于 2012-10-21T21:19:24.007 に答える
2

アンパサンド (「&」) は、変数のではなく、変数のアドレスを指定するために使用されます。これを「参照渡し」と呼びます。

したがって、「&$variable」は変数への参照であり、値ではありません。また、「function &func(...」は、変数のコピーではなく、戻り変数の参照を返すように関数に指示します。

以下も参照してください。

于 2012-10-21T21:19:35.157 に答える