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

KUROSAWA Akira php-users@php.gr.jp
Thu, 03 Oct 2002 17:58:09 +0900


黒澤と申します。

現在、クラスを利用したプログラムを作成しています。
インスタンスの参照(リファレンス)について質問させて下さい。

1つのインスタンスを参照する2つの変数(リファレンス)がある場合に
この2つの変数が同じインスタンスを参照している事を確認する方法
を探しています。

例えば下記の「check_ref」のような関数を作りたいのです。

<?php
class Hoge
{
    var $hoge = 'abc';
}

$object1 =& new Hoge;
$object2 =& new Hoge;

$object1_ref =& $object1;

if (check_ref($object1, $object2)) {
    // ここは実行されません
}

if (check_ref($object1, $object1_ref)) {
    // ここは実行されます
}
?>

PHPマニュアルの『第15章 リファレンスの説明』
http://www.php.net/manual/ja/language.references.php

のページで「check_reference」と言うそのものズバリのロジックが紹介されて
いましたが、この方法を応用したとしても、引数として渡すオブジェクトに対し
て次のような制限が発生してしまいます。

・クラス内に定義された変数の値として、インスタンスの参照を持てない。

これでは使用できるシチュエーションが、かなり限定されてしまいます。

他の方法はないかと思考錯誤しているのですが、良い方法をご存知の方が
いらっしゃいましたらご教示頂けないでしょうか。
参考になりそうなポインタだけでも構いません。

以上です。
よろしくお願い致します。

-- 
株式会社システムジェイ
    システム開発グループ
    黒澤 明  kurosawa@systemj.com