ホームページ  >  記事  >  バックエンド開発  >  参照と別名は異なるメカニズムzkarakaya_PHP教程

参照と別名は異なるメカニズムzkarakaya_PHP教程

WBOY
WBOYオリジナル
2016-07-13 17:23:111076ブラウズ

参照とエイリアスは異なるメカニズムです 著者: zkarakaya 日付 14/03/2001 エイリアスと参照は、PHP ではまったく異なるメカニズムです。 Java または C++ プログラマーの場合、実行時に作成されたオブジェクトを使用するときは注意が必要です。
例を見てみましょう。
class MyClass{ var $myData; var $outManager; cfunction MyClass($p){ $this->myData=$p; $this->outManager = 新しい MyOutManager($this); cfunction display(){ $this->outManager->display(); }クラス MyOutManager{ var $refObj; cfunction MyOutManager(&$obj){ $this->refObj = &$obj; cfunction display(){ echo $this->refObj->myData; $myvar = 新しい MyClass(10); $myvar->myData = 20; $myvar->display(); ?>
このプログラムコードの出力はどのような値になりますか。多くのプログラマは「20」と答えるでしょうが、これは正しくありません。出力は 10 です。なぜですか?代入演算子の右側に MyClass 型のインスタンスを作成し、初期値 10 を与えているためです。MyClass のコンストラクターで、その新しく作成されたインスタンスのメモリ位置を MyOutManager 型の別のオブジェクトに送信しています。この値を $refObj に保持します。このオブジェクトの参照カウントは 1 になり、これは outManager インスタンスの $refObf プロパティです。実行を続けましょう。コンストラクターはジョブを終了し、代入演算子に戻りました。 PHP4 は、新しく作成されたオブジェクトに対して $myvar という名前の新しい参照を作成するようになりました。現在、そのオブジェクトの参照カウントは 2 です。$myvar がエイリアスではないことに注意してください。そのため、$myData という名前のプロパティに値 20 を割り当てる次のステートメントを実行すると、PHP4 は MyClass 型の新しいインスタンスを作成し、そのメンバーの outManager によっても参照される古いインスタンスの内容をコピーします。そして、myData の内容を 20 に変更します。


>今後は、タイプ MyClass の 2 つの異なるインスタンスを持つことになります。私たちの意図はこれではありませんでした。したがって、この問題を修正するには、オブジェクト作成ステートメントでエイリアス、つまり use; を使用します。
$myvar = &new MyClass(10);
これで問題は解決します。したがって、C++ および Java プログラマーの場合は、PHP コードを作成する際に注意する必要があります。
この説明は、Andi Gutmans が執筆した『PHP 4: Reference Counting and Aliasing』に記載されている情報と矛盾しません。
ジヤ・カラカヤ

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/532238.html技術記事参照とエイリアスは異なるメカニズムです 著者: zkarakaya 日付 14/03/2001 エイリアスと参照は、PHP ではまったく異なるメカニズムです。 Java または C++ プログラムを使用している場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。