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

yuji koga koga-y @ mcp-net.com
2003年 12月 25日 (木) 14:38:13 JST


お世話になります。古賀です。
重松様、岡部様、レスありがとうございます。

> 重松です。こんにちは。
>
> 仮に子供一覧が取得できたとして、どの子供のインスタンスを作るつもりですか?
> 
> PEAR::DB の場合には、DSN で作る子供のインスタンスを判定していますが、単
> に count だったら、何をどうカウントするのか、指示を与えなければなりま
> せんね。

書き忘れましたが、例で用いたPEAR::DBによるカウントはあくまで例です。

もちろん、DB上の1レコードに1対1対応させた1インスタンスをシングルトン生成
させるケースでは、必ずインスタンスが生成されますので、自分が困っているような
問題は生じません。

> だとすると、素直に、子供のインスタンスを作り、操作は親クラスの関数 (メソッ
> ド) で統一的に行うというので問題がまったくないと思うのですが、私が質問意
> 図を汲み取れていないでしょうか?

しかし、インスタンスの有る無しにかかわらず、 goodsというクラス、
あるいはuserというクラスに共通して持たせるメソッドがあります。
例えば、フィールド名の一覧を返したり、フィールド値の詰まった配列から
画面表示用に文字列加工を施した別の配列を返したりする場合です。

このようなメソッドは自クラスからのみでなく、それを委譲された別のクラスから
パブリックに呼び出されるケースがあります。

その時、そのようなパブリックメソッドはインスタンス無しにクラスメソッドとして
これまで使ってきたので、そのインターフェイスを変更したく無かった為、
このような質問をさせて頂きました。

> 岡部といいます。
> 
> 中略
>
> インスタンス無しで用いることを想定してクラスメソッドを書く場合、
> '::'記法のほかにもう1つ、特別な名前'parent'を使用できます。
>
> 以下略

実は自分も'parent'による岡部様の方法しかないかな〜と考えていて、
効率的な実装方法に悩んでいました。
というのも例ではメソッドが1つのみですので簡単なのですが、
実際に業務に使っているケースでは、メソッドをいくつも持ち、子クラス自身も
複数定義してあるため、それらに全部

> function test(){
>     return parent::test('user_tbl');
> }

といった記述を埋め込むのはちょっとアレなので、どうにかその手間を省けないかな、
と試行錯誤しておりました。

userクラスが参照するテーブルはuser_tbl、goodsクラスが参照するテーブルは
goods_tblと、命名規則は合わせておりますので、もしここで子クラスの
クラス名を得ることさえできれば、実はこの部分すら親クラス内に
書けてしまうのでは?と淡い期待を抱いていたのです。

しかし、どうやら無理そうですので、
とりあえず岡部様の方法でやってみようと思います。

他にも、なにか便利な実装法などありましたら、宜しくお願い致します。


<? /*********************************
       koga-y @ mcp-net.com
*********************************/ ?>



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