ホームページ  >  記事  >  バックエンド開発  >  PHP関数名の前にアンパサンドを付ける意味と機能を詳しく解説!

PHP関数名の前にアンパサンドを付ける意味と機能を詳しく解説!

伊谢尔伦
伊谢尔伦オリジナル
2017-06-21 10:53:134030ブラウズ

PHP では、& 記号はコピーではなく変数への参照を渡します。参照とは、同じ変数の内容に異なる名前でアクセスすることを意味します。これは、シンボル テーブルのエイリアスである C のポインターとは異なります。 PHP では、変数名と変数の内容が異なるため、同じ内容が異なる名前を持つ可能性があることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システムにおける緊密な接続と考えることができます。

PHP 参照を使用すると、2 つの変数を使用して同じコンテンツを指すことができます。つまり、次のようにすると:

<?php 
$a =&$b 
?>

これは、$a と $b が同じ変数を指すことを意味します。
注: ここで $a と $b はまったく同じです。$a が $b を指しているわけではなく、$a と $b が同じ場所を指しているということです。
同じ構文は、参照を返す関数と新しい演算子 (PHP 4.0.4 以降) で使用できます。

<?php 
$bar =& new fooclass(); 
$foo =& find_var ($bar); 
?>

注: & 演算子を使用しないと、オブジェクトのコピーが生成されます。クラスで $this を使用すると、そのクラスの現在のインスタンスに適用されます。 & なしの代入はインスタンス (オブジェクトなど) をコピーし、$this はそのコピーに作用しますが、必ずしも望ましい結果になるとは限りません。パフォーマンスとメモリ消費の問題のため、通常は 1 つのインスタンスのみで作業する必要があります。
@new などの @ 演算子を使用して、コンストラクター内の エラー メッセージをオフにすることができますが、これは &new ステートメントを使用する場合には効果がありません。これは Zend エンジンの制限であり、解析エラーが発生します。
参照が行う 2 番目のことは、参照によって変数を渡すことです。これは、関数内にローカル変数を作成し、その変数が呼び出しスコープ内の同じコンテンツを参照することによって実現されます。例:

<?php 
function foo (&$var) { 
$var++; 
} 
$a=5; 
foo ($a); 
?>

は $a を 6 に変換します。これは、関数 foo で変数 $var が $a が指すものと同じものを指しているためです。詳細な説明については、「参照による受け渡し」を参照してください。
参照が行う 3 番目のことは、参照を返すことです。

php関数その前にアンパサンドを追加する意味は何ですか?以下に 2 つのデモ コードを最初に示し、次に説明を示します。

rreee

2つ目の関数を説明しましょう。
この方法で $a=test(); が取得するものは、実際には関数参照の戻りではなく、通常の関数呼び出しと何ら変わりません。

理由としては: これは PHP の規定です
PHP には $a=&test が必要です() ; メソッドは関数の参照戻り値です。

参照戻り値とは何かについては (PHP マニュアル に記載されています) 参照戻り値は、関数を使用して参照をバインドする必要がある変数を見つけたい場合に使用されます。 )

上記の例を使用して説明すると、
$a=test() を使用して関数を呼び出すと、関数の値が $a に代入されるだけであり、$a への変更は関数内の $b には影響しません。 $a=&test() を使用して関数を呼び出すと、その関数は、戻り値 $b の変数のメモリ アドレスと $a 変数のメモリ アドレスを同じ場所にポイントすることになります。この効果と同等 ($a=&b;) したがって、$a の値を変更すると $b の値も変更されるため、
$a=&test(); を実行すると、$b の値が変更されます。 5になります。

以上がPHP関数名の前にアンパサンドを付ける意味と機能を詳しく解説!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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