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

WADA Masashi php-users@php.gr.jp
Tue, 08 Oct 2002 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