[PHP-users 19834]リファレンスを入れた配列の先頭要素を取得

Kentaro Ishitoya isitoya @ wakhok.ac.jp
2004年 1月 12日 (月) 00:31:19 JST


こんばんは、2度目の質問になります、石戸谷です。

19794では重松様ありがとうございました。
ちょっと悲しくなりましたが、ないということがわかっただけでも幸いです…。

ところで、
class A{
    var $name;
    var $next;
    function A($name){
        $this->name = $name;
        $this->next = null;
    }
    function setNext(& $next){
        $this->next =& $next;
    }
    function setName($name){
        $this->name = $name;
    }
}
のようなクラスを用意して、これを次のように初期化して配列に代入した時、
$a1 = new A("one");
$a2 = new A("two");
$a3 = new A("three");
$a1->setNext($a2);
$a2->setNext($a3);
$array[] = &$a1;
$array[] = &$a2;
$array[] = &$a3;

配列にセットされている先頭要素をリファレンスで取得する方法はないでしょうか。
//1:これでできれば一番いい。
$data = reset($array);
$data->setName("uhe");
echo $data->name . ":" . $a1->name . "<br>";
//2:苦しまぎれ
$data =& reset($array);
$data->setName("uhe");
echo $data->name . ":" . $a1->name . "<br>";
//3:これしかないのでしょうか
$data =& $array[0];
$data->setName("uhe");
echo $data->name . ":" . $a1->name . "<br>";

結果
uhe:one --- 1
uhe:one --- 2
uhe:uhe --- 3

この場合は、先頭要素が0だというのがわかっていたので、&$array[0]を使って直接
データを変更することができましたが、もし0でない場合、0が削除されていた場合な
どは使えませんよね…
これがだめだと、resetもcurrentもnextもprevもendも使えないということで、リ
ファレンスは後付なんだなぁとかってに納得してしまいます…

挿入するデータにキー情報を持たせた上で、[PHP-users 19794 Re: 連想配列中の任
意の位置に要素を挿入]で教えていただいたような方法を使って、データを取り出す
しかないのでしょうか。
なにか、他に良い方法があればご教示ください。
もし、リファレンス周りに問題のないC++のvectorのようなクラスライブラリがあれ
ば、あわせて教えていただければ幸いです。
よろしくお願いいたします。




PHP-users メーリングリストの案内