PHPの参照代入演算子、=&


回答:


121

廃止予定ではなく、廃止される可能性はほとんどありません。これは、たとえば、既存のデータをコピーする代わりに、あるアレイの一部またはオブジェクトを別のオブジェクトミラーに変更する標準的な方法です。

これは参照による割り当てと呼ば、マニュアルを引用すると、「両方の変数が同じデータを指すことになり、何もコピーされないことを意味します」

唯一されると、非推奨=&「の結果を代入されnew、参照により」PHP 5混乱の源であるかもしれません。newは参照によって自動的に割り当てられるため、では&冗長/非推奨ですが$o = &new C;、では非推奨です$o = &$c;


検索が難しいので、=&equals amperpers)は= &equals space ampersand)と同じであり、$x = &$y['z'];or $x = &$someVarampersand dollar sign variable name)のような他の変数に実行されるように記述されることが多いことに注意してください。ドキュメントから簡略化した例:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

PHPマニュアルの「参照による割り当て」の詳細セクションへの便利なリンクを以下に示します。そのページは参考文献シリーズの一部です。シリーズ全体を読むのに少し時間をかける価値があります。


8
補足:re:"検索が難しいため"symbolhound.comは、このようなものの友達です。
Billynoah 16

1
@billynoahうわー!シンボルハウンドがツールボックスに永久に追加されました。
Parapluie

26

2つの異なる演算子です。=おそらくご存じのとおり割り当てです。また&、値ではなく参照によって変数にアクセスする必要があることを意味します。


60
申し訳ありませんが、これは単純すぎます。$ a =&$ bは、変数$ aが$ bが現在行っているのと同じことを参照することを意味します。この後、$ a = 5; また、$ bは5になります。ただし、参照リンクは$ b =&$ xyzによって壊れる可能性があります。またはunset($ b); そのとき、$ aは5を保持するセルがどこにあるかを知っている唯一の変数になります。また、=&を使用して$ aを設定した場合、次に=&(またはunset($ a))を使用して変更する必要があることに注意してください。 $ aの参照リンク、具体的には$ a = NULL; リンクが壊れることはなく、5がnullに置き換えられるだけです。
ドン

8
@ドン:詳細をありがとう。私はあなたがCプログラマであると言うことができます。
Asaph 2010

8
私はドンが言うことを二番目に言います。しかし、これが単純すぎるとは言いません。これは間違っていると思います。
Artefacto 2010

@ドンあなたは本当にあなたのコメントを回答として投稿するべきです。
アダム

6
$x = &$y['z'];

また、$y['z']存在しない場合は作成し、に設定する効果もありnullます。

これにより、読みたいエラーメッセージを防ぐことができます。これに関するドキュメントはまだ見つかりません。5.3の新機能かもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.