引用符とは何ですか?
PHP での引用とは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは C ポインターとは異なり、参照はシンボル テーブルのエイリアスです。 PHP では変数名と変数の内容が異なるため、同じ内容でも異なる名前が付けられることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムのハードリンクと考えることができます。
1: 変数参照
コードをコピー コードは次のとおりです:
$a =100;
$b = &$a;
echo $b; 100 here
echo $a; //ここでは 100 が出力され、$a と $b の値が両方とも 100 であることを示します。
$b= 200;
echo $a; //ここに 200 を出力します
echo $b; //ここに 200 を出力します。これは、同じアドレスを使用していることを示します。どちらかを変えるともう一方も変わります。
a+100;
Return $b;
}
main(55,&$b); //ここでの $b は、パラメータ $b の変更を通じて、実際にそのメモリ アドレスを関数 main の $b パラメータに渡しています。そして外側の $b の値を変更します。
echo $b; //155 がここに出力されます、?>
3: 値によるオブジェクト参照
オブジェクト参照
コードをコピーします
コードは次のとおりです:
クラスクラブ{
var $name="レアル・マドリード";
}
$b=new club;
$c=$b;echo $b->name;//ここにレアル・マドリードを出力します
echo $c-> ;name;//ここにレアル・マドリードを出力
$b->name="ronaldo";echo $c->name;//ここにロナウドを出力?>参照の設定を解除すると、変数名と変数の内容の間のバインディングが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:
コードをコピーします
コードは次のとおりです:
$a = 'ronaldo'
$b =&$a;
unset ($a);
?> ;
いいえ $b の設定は解除されますが、$a だけです。
参照渡しの例
test1.php
コードをコピーします コードは次のとおりです:
/**
* 参照渡し
以下のものを参照渡しできます:
foo($a) などの変数
foo(new foobar()) などの新しいステートメント
関数から返される参照、たとえば:
*/
Function foo(&$var)
{
$var++ }
$a=5; // 正当な foo(new stdClass()) //
関数の不正な使用法 bar(); &
{
$a = 5;
return $a; }
foo(bar()) // PHP 5.0.5 以降では致命的なエラーが発生します
foo($a = 5) // 変数ではなく式ふー( 5) // 致命的なエラーが発生します
?>
test2.php
コードをコピーします
コードは次のとおりです:
function test(&$a)
{
$a=$a+ 100;
}
$b=1;
echo $b;//出力 1
test($b); //ここで関数に渡されるのは、実際には変数が格納されているメモリ アドレスです。 $b の内容を見つけるには、関数内の $a の値を変更することで $b
echo "
echo $b;//出力 101
/*****************************
*
* ここで、call_user_func_array の後のパラメータが必須であることに注意してください&
*
* *** ** *************************/
//上記 "test($b);" の $b の前に & 記号を追加しないでください。ただし、関数 "call_user_func_array" では、パラメータを参照したい場合は & 記号が必要です次のコードに示すように、シンボルを使用します。 ; //出力 1 ?>
リファレンスリターン
リファレンスリターンは、関数を使用して参照をバインドする必要がある変数を見つけたい場合に使用します。パフォーマンスを向上させるために戻り参照を使用しないでください。エンジンはそれ自体を最適化するのに十分な機能を備えています。正当な技術的理由がある場合にのみ参照を返してください。参照を返すには、この構文を使用します
コードをコピーします コードは次のとおりです:
function &test()
{
static $b=0;//静的変数を宣言します
$b=$ b+1;
echo $b;
return $b;
$a=test();//このステートメントは $b の値を 1 として出力します
$a=5; $a=test( );//このステートメントは $b の値を 2 として出力します
$a=&test();//このステートメントは $b の値を 3 として出力します ここでは、 $b の $b 変数 $a 変数のメモリアドレスは同じ場所を指します
$a=5; // $b が返される $b 変数の値が変更されました
$a=test(); //このステートメントは $ を出力します b の値は 6 です
?>
説明:
このように、$a=test(); は実際には関数参照の戻り値ではなく、通常の関数と何ら変わりません。理由としては、これは PHP です。
php では、関数の参照戻り値は $a=&test(); を通じて取得されると規定されています。参照をバインドする場所を見つけるために関数を使用したい場合に使用します) 変数が上にある場合) このナンセンスにより、長い間理解できませんでした
上記の例を使用して説明すると、 $a=test() は関数の値を $a に代入するだけで、$a に行われた変更は関数内の $b には影響しません
そして、$a=&test() を通じて関数を呼び出すと、その関数は比較することになります$b 変数のメモリ アドレス $b と $a 変数のメモリ アドレスを返す 同じ場所を指す
この効果と同等の結果が得られます ($a=&$b;) したがって、$a の値も変更します$b の値を変更するため、
$a=&test();
$a=5; を実行すると、$b の値は 5 になります
ここでは、参照の戻り値を理解できるようにするために静的変数が使用されています実際、関数の参照戻りは主にオブジェクトで使用されます
興味深い例は oschina で見られます:
コードをコピーします
コードは次のとおりです:
$a = array('abe','ben','cam'); foreach ($a as $k=>&$n)
$n = strtoupper($n); k=>$n) // ここには参照がないことに注意してください!
echo "$nn"( $a);
?>
は次のようになります:
ABE
BEN
Array
(
[0] => ABE
[1] => BEN
[2] => BEN
)
説明: 2 番目の foreach のループは次のとおりです。 ABE
[1] =>BEN
[2] =>ABE
)
配列
(
[ 0] =>ABE
[1] =>BEN
[2] =>BEN
)
Array
(
[0] => ABE
[1] => BEN
[2] => ; BEN
)
unset($n)がないので、常に配列の最後の要素を指します2 番目の foreach の最初のループは $n、つまり $a[2] を ABE に変更します。2 番目の最初のサイクルは BEN に変更され、3 回目も BEN に変更されました。
http://www.bkjia.com/PHPjc/825103.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/825103.html技術記事
PHP での引用とは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは C ポインターとは異なり、参照はシンボル テーブルのエイリアスです。 PHP では、次のように変更することに注意してください...