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

ISIGE, Akira xia @ silvia.com
2003年 10月 27日 (月) 13:37:13 JST


いしげ です.

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 メーリングリストの案内