[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