PHPの参照演算子&の使い方と注意点

高洛峰
リリース: 2016-10-17 11:15:40
オリジナル
3180 人が閲覧しました

PHP の参照演算子 & は、C に詳しい人なら誰でも、C にはポインターと呼ばれるものがあり、ポインターはメモリ アドレスを指すことを知っています。これも同じ機能です。

次のコードを見てください:

$source="110";
$a=$source;
$b=&$source;
$source="120";
echo $a."\r\n",$b;
ログイン後にコピー

このコードを実行すると、コードの 4 行目の $a の値が $source の値に従って変化しないことがわかります。これはまだ元の割り当てのままです。 「110」です。$a が割り当てられると、$source の値は 110 になります。彼女は、$source の値を自分自身にコピーしただけです。

変数 $b の値がほぼ同時に割り当てられていることに気づくでしょう。なぜ、一方が人を殴る責任を負い、もう一方が責任を負うのか。人々を救うには、その違いは十分に大きいです。

これは、PHP の参照演算子 & の問題です。値を割り当てるときに変数 $b が & に適用されるため、$b は "110" を自分自身にコピーせず、将来 $source のホームを直接指します。彼です$bです。 $source がどのように変化しても、それは $b の変化につながります。ホストと 2 つのモニターの関係と同じように、$b の変化は当然 $source の変化につながります

:

$b=122;
echo $source;
ログイン後にコピー

出力結果は次のとおりです: 122. ほら、これからはこれら 2 つの変数が 1 つの「人」になります。

実際、プログラムの読みやすさと、その後のプログラミングの誤動作を考慮して、& 参照演算子の使用はお勧めしません。よく考えてください。行 10,000 より前に $b=&$source; を使用していましたが、行 10,000 以降はそれを覚えていない可能性があります。誤って間違った値を割り当てても、デバッグ中には十分です。はは...

実際、この演算子はデータベース接続でよく使用されます。データベース接続オブジェクトを作成するときに必要なのは 1 つだけで、多すぎると役に立たないことが多いからです。

次のクラスがあるとします。

class MysqlConnect{} //用来创建数据库连接,那么我们每次调用的时候可以这样写
  
$conn=& new MysqlConnect();
ログイン後にコピー

この書き方により、データベース接続が繰り返し作成されてシステム リソースを消費することがなくなります。しかし、実際に複数の異なる接続が必要な場合は、このように記述してはいけません。

もちろん、この PHP 参照演算子は、PHP スクリプトで何千ものオブジェクトを作成する場合に確かに役立ちますが、システムのオーバーヘッドは確かに非常に高くなります。複数作成する必要がない場合は、&! を使用してみてください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート