[PHP-users 19568]Re: インスタンスの生成無しで利用するクラスメソッド内から、同クラスの他メソッド・プロパティを利用する方法について

T.Okabe okabe @ nsd.jip.co.jp
2003年 12月 25日 (木) 14:10:03 JST


岡部といいます。

>オブジェクトメソッドとして
>
>$goods = new goods;
>$cnt = $goods->count();
>
>として用いれば問題なく動作しますが、
>インスタンスを生成しないクラスメソッドとして
>
>$cnt = goods::count();
>
>と用いると、$thisが定義されていない為、当然ですが正常に動作しません。

インスタンス無しで用いることを想定してクラスメソッドを書く場合、
'::'記法のほかにもう1つ、特別な名前'parent'を使用できます。
(ref. PHPマニュアル「第14章 クラスとオブジェクト」の「親クラス」

そこで、親から子を見るのではなく、子から親を見るようにすると、
次のようなコードを書くことが出来ます。
# 元のコードを簡略化してますが。

どうでしょうか?

------------------------------ここから
class A{
    function test($tbl_name){
        return "count of $tbl_name";
    }
    
    function getTableName(){}
}

class goods extends A{
    function test(){
        return parent::test('goods_tbl');
    }
}

class user extends A{
    function test(){
        return parent::test('user_tbl');
    }
}

echo goods::test()."\n";    //  'count of goods_tbl'が出力される。
echo user::test()."\n";     //  'count of user_tbl'が出力される。
------------------------------ここまで


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