ホームページ  >  記事  >  バックエンド開発  >  PHP の「参照」を理解するための 2 つの例

PHP の「参照」を理解するための 2 つの例

WBOY
WBOYオリジナル
2016-06-23 13:08:14786ブラウズ

php変数の前の&記号は、$a = & $bのように、2つの変数が同時に同じアドレスを指すことを意味しており、Cとは異なります。ここで、$aと$bは次を指します。ここで、$a と $b はまったく同じです。

例 1: 以下のように php 関数の前に & を追加します:

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$a=5;$a=test(); //这条语句会输出 $b的值 为6

$a=test(); 得られるものは関数の参照戻りではなく、通常の関数呼び出しと何ら変わりません。 . PHP には $a=&test() が必要です ; このメソッドは関数の参照戻り値を取得します (参照をバインドする必要がある変数を見つけるために関数を使用する場合に参照戻り値が使用されます)。説明: $a=test() メソッド 関数を呼び出すと、関数の値が $a に代入されるだけであり、$a に対する変更は関数内の $b には影響しません。 $a=&test() を介して関数を呼び出すと、その関数は $b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所にポイントします。 つまり、これと同等の効果が得られる($a=&b;)。したがって、$a の値を変更すると $b の値も変更されるため、 $a=&test(); $a=5; を実行すると、$b の値は 5 になります。参照割り当てを使用すると、コピーを作成する代わりに元のオブジェクトを使用できます。

例 2: $a = “hello”;

$b = &$a;

unset($b);

ある変数の値が別の変数に代入されるとき、元の変数のコピー変数は最初に生成され、次にメモリ内の別の場所に保存されます。例:

$a = 5;

$b = $a;

まず $a のコピーを生成し、それを $b に保存します。その後 $a の値が変更されても、$b の値は変更されません:

$a = 7; //$b はこの時点ではまだ 5 です

このようなコピーを回避するには、参照演算子 & を使用できます。例:

$a = 5;
$b = &$a;

$b = 7; //このとき、$a と $b は両方とも 7 になります。 この行は $a =7; と置き換えることもできます。

引用は非常に興味深いです。参照はポインタではなくエイリアスのようなものであることに注意してください。 $a と $b は両方ともメモリ内の同じアドレスを指します。指すアドレスはリセットすることで変更できます。以下に示すように:
unset($a);
リセットしても$bの値は変更されませんが、$aとメモリに格納されている値7の間の接続が破壊されるだけです。
参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。たとえば、以下に示すように、$b は設定解除されず、$a のみが設定解除されます。

$a = 1;
$b =& $a;
unset($a);



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。