[PHP-users 31272] オーバーライドでのメソッドの拡張方法

Shindo shindo @ atsystem.jp
2007年 1月 18日 (木) 19:27:46 JST


お世話になっております。進藤と申します。

PHP-4.4.4 でメソッドの拡張が思うようにならないので教えてください。
以下のソースを実行すると「実行結果」の様になります。
希望としては、class foo の中では $this は、fooであってほしいのです。
つまり、foo::mainからはfoo:subを実行してほしいのですがbar:subが実行され
てしまいます。

1)これは正しい動作なのでしょうか。それとも、何か方法があるのでしょうか。
2)PHP5のselfは、このあたりのスコープ定義に使えるのでしょうか。
  手元にPHP5の環境がないので実験していません。
以上2点、よろしくお願いします。

ソース
<?php   // class.php
    class foo
    {
        function sub()
        {
            echo "My name is foo::sub.\n";
        }
        function main()
        {
            echo "My name is foo::main.\n I am calling to foo::sub.\n";
            $this->sub();
        }
    }

    class bar extends foo
    {
        function sub()
        {
            parent::sub();
            echo "My name is bar::sub.\n";
        }
    }

    $obj = new bar;
    $obj->main();
?>

実行結果
% php -f class.php
My name is foo::main.
 I am calling to foo::sub.
My name is foo::sub.
My name is bar::sub.

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 進藤寿則@アットシステム   _/_/
 e-mail shindo@atsystem.jp     _/



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