[PHP-users 18633]Re: 引数有り関数、引数無し関数の見分け方
JJ
jj @ sann.ne.jp
2003年 10月 27日 (月) 14:04:45 JST
JJです。
CSVに例えてしまったのが間違いでした--;
実際は、以下の様な形式の配列がユーザー側(※)からフレームワークに入ってきます。
この配列はフレームワークが作った物ではありません。
phpで自動的に作られる物と考えてください。
この配列から関数を呼び出すという事です。
(※)ユーザー側…フレームワークを継承したクラス
array {
[0] => "func1"
[1] => "argv1"
[2] => "func2"
[3] => "func3"
[4] => "argv2"
}
>いしげ です.
>
>On 2003/10/27 11:11:51 JST,
>JJ <jj @ sann.ne.jp> wrote:
>
>> $funcsにカンマ区切りで関数名、関数の引数(※)とランダムで入ってくるとしま
>> す。
>> その値を関数名か関数の引数か判断して関数をコールする場合に、
>> 文字列が関数であるか関数でないかという情報がなければ、
>> 以下の様に関数をコールする事は出来ません。
>
>この仕様は,まず関数と引数を区別できなくしておいて,
>その後になって再度それらを区別しようとする,
>非常にまずいものと思います.
>
># いわば magic_quote_gpc をわざわざ on にしておいて
># 変数ひとつひとつ stripslashes() するようなものです(w
>
>
>JJ さんのフレームワークの全体を知らないので一般論的な話になりますが,
>
>> "func1,argv1,func2,func3,argv2,func4"
>
>という CSV(?) を作る段階で関数・引数という情報が失われているのが
>諸悪の根源であるわけで,
>
> (a) そもそも関数と引数を CSV で渡すのをヤメる
> (b) array にする → "func1,argv1", "func2", "func3,argv2", "func4"
> (b') 複数行 CSV にする
> (b") array を serialize() した単一文字列で渡す
> (c) 区切り文字を変える → "func1,argv1;func2;func3,argv2;func4"
> (d) セパレータを入れる → "func1,argv1,/,func2,/,func3,argv2,/,func4,/"
>
>などなど,とにかく「情報を失わせずにデータを持ち回る」という
>基本的な方針で対応した方が良いように思います.
>
>$funcs に文字列を入れて渡す,という仕様が前提となっているようですが,
>要は「呼びたい関数とその引数」を複数渡せれば良いわけで,
>この部分のインタフェースを見直した方が,
>結果的にあれこれ悩む分のコストが浮かせられるのではないでしょうか.
>
>
>--
>ISIGE, Akira
>
>_______________________________________________
>PHP-users mailing list
>PHP-users @ php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users
PHP-users メーリングリストの案内