[PHP-users 117] 配列の中のオブジェクトのメソッドを呼ぶには?

Osamu Shigematsu php-users@php.gr.jp
Tue, 19 Jun 2001 15:42:39 +0900


重松と申します。

配列の中のオブジェクトのメソッドを呼ぶにはどうすればよいのでしょうか?

class foo{
    function say($v){ print "Hello, $v!"; }
}

class bar{
    var $data = array();
    fcuntion start(){
        data["foo"] = new foo;
    }
    function say($n,$v){ $this->data($n)->say($v); }
}

のようにしたのですが、エラーになります。

($this->data($n))->say($v)
($x = $this->data($n))->say($v)

もダメでした。

$x = $this->data($n); $x->say($v)

だと、エラーになりません。

何故一度代入しないと呼べないのでしょうか?
代入したところで、それ (配列の中味) がオブジェクトではないかもしれないし、空
かもしれないというリスクがなくなるわけではないと思うのですが。

また、このとき、上記のリスクに備えるため、C++ でいうところの dynamic_cast の
ように、foo もしくは foo のサブクラスであり、確実に say() メソッドが実装され
ているか、知りたいのですが、可能でしょうか?
is_subclass_of() だとか、get_class_methods() だとかは、PHP3 では使えないよう
です。

環境:
VineLinux 2.0CR (Intel)
Apache 1.3.12
PHP 3.0.15 (国際版)
PHPLIB 7.2c

よろしくお願いいたします。

--
Osamu Shigematsu