[PHP-users 10607] Re: 1つのインスタンスを参照する2つの変数のチェック方法

WADA Masashi php-users@php.gr.jp
2002年10月08日 00:10:34 +0900


 和田です。
KUROSAWA Akira wrote:
>何故こうなるのか検証してみました。
>どうやら check_reference() のバグのようですね(^^;

 間違った結果に対して、私が Reference Counting の影響ではないか
という、間違った解釈をしてしまったんですね。X-<
簡単に整理すると、
 function check_reference(&$var1, &$var2) は、
 ・$var1の末尾に"."を追加してみる
 ・$var2の値が同様に変化していたらリファレンスであると判定
 という処理が実装されている。これは意図通りに動作する。
 (ただしバグが見つかった)
ということになるでしょうか。Reference Counting の話を持ち出して、
話を混乱させてしまったようです。申し訳ありません。
 で、check_reference($var1, $var2) の $var1, $var2 に、任意クラ
スのオブジェクトを指定する場合はどうしたら良いかというのが、そも
そもの問題でした。
 一つの案として、インスタンスごとにユニークなIDを付与するという
方法を挙げましたが、これも Reference Counting とは何の関係なく、
実現可能と思われます。
念のため
http://www.php.net/manual/ja/language.references.php
で紹介されている check_reference() を引用しておきます。
----------------------------------------
If you want to check whether there is a reference 
between two variables you can use this function.
function check_reference(&$var1, &$var2)
{
 // Save old values
 $var1_old = $var1;
 $var2_old = $var2;
 // ($var1 . ".") must not be $var2
 if($var1 . "." == $var2)
 $var1 .= ".";
 // Change $var1
 $var1 .= ".";
 // Did $var2 also change?
 if($var2 == $var1)
 $reference = true;
 else
 $reference = false;
 // Old values
 $var1 = $var1_old;
 $var2 = $var2_old;
 return $reference;
}
----------------------------------------
----
和田雅志 (WADA Masashi)
wada@hh.iij4u.or.jp

AltStyle によって変換されたページ (->オリジナル) /