[PHP-users 18576]Re: 引数有り関数、引数無し関数の見分け方

JJ jj @ sann.ne.jp
2003年 10月 23日 (木) 17:42:18 JST


 JJです。

>この前提条件がどうして発生したのかの詳細を書いていただければ,
>何か他の方法がみつかる可能性があるかと思いますが...
>そもそも、どうしてこういうことがやりたいのでしょうか?

フレームワークを作っていまして、Testクラスがフレームワーク、
ChildTestがフレームワークを利用するユーザーが作ったクラスになります。
フレームワークという事で、なるべく扱う側が簡単に実装出来るようにと考えていまして、
実装する側にはフレームワークを意識せず1つの関数を追加しただけで
関数の引数を取る事が出来るようにしたかったんです。
ChildTestにfunc1_check()を追加するような方法では、
フレームワークを使うユーザーがfunc1()を追加したらfunc1_check()も追加しなくてはならないため、
無駄な労力が発生してしまいます。

後、いしげさんのおっしゃる様に、とりあえず引数をわたしても
大丈夫だとは思いますが、
これをすると、フレームワーク側の処理が上手く動かなる問題が出てきます。
なぜかというと、これは話がすごく長くなりそうなんで伏せさせて頂きますが、
この問題を解消しようと思えば、ChildTest側に処理を追加する必要があるため、
結局、func1_check()と同じように、ユーザー側に無駄な労力が発生してしまいます。

このような感じの事をしたかったんです。
ただ今は無理な感じがしてきたので、ChildTest側に関数情報を持たせる方向で考えて行きたいと思います。
これならいくらでも方法はあるので・・・

わかりずらい説明ですいません_(_ _)_


>なので、内部的には、関数は全て引数の個数を意識しないのだと思います。
># というのは、引数の数を変えて x を定義しても、再定義として怒られる。
>## ということで、関数は引数の数は気にしなくて、
>## 名前だけで定義されているのでは?
>
>このあたりは、Zend Engine に詳しい方でないと実際のところは
>分からないですが、動きからして、できなさそうな臭いがぷんぷん。

私もそう思ってまして、駄目元で投稿させていただきました;
ただ以下の1)の場合にはWarningが出るので少しは望みはあるかなと思ってました。
ちなみに2)は普通に処理されます;


1)関数に引数が定義されている場合
   $this->func1()
   function func1($arg) {}

2)関数に引数が定義されていない場合
   $this->func1($arg)
   function func1() {}



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