[PHP-users 14218] Re: 引数の数を調べる
Koji Yamamoto
php-users@php.gr.jp
2003年 3月 24日 (月) 09:49:12 JST
山本です。
早速お返事ありがとうございます。
進藤さまwrote;
> 引数を変数名で参照する限り、引数の数は必要ないと思うのですが。
引数がすべて指定されたかどうかが知りたかったのです。
初期値を省略している場合と,していない場合でプロセスを変えたかったのですが,
その場合に,$arg_cnt = 4 と直値打ちして,func_num_args() < $arg_cnt などとは
したくなかったわけです。
では引数が初期値かどうかを判定することも考えたのですが,それもアリですが,
マニュアルなどを見て,出来ないのかな?と疑問を抱いたもので,
今回,質問しました。
重松さまwrote;
> 今回の目的は、おそらく、ソースを修正していくうちに、
> 即値を埋めておくと、それが不整合を起こす可能性が予見されるので、
> 防ぐ手段があれば、防ぎたい、というものでしょう。
その通りでして,現段階で引数は4つかもしれないけど,今後増える可能性を
考えると,直値で入力するのは防ぎたいと思った次第です。
> class SomeObject
> {
> // いろいろ
> function someFunction($arg1, $arg2, $arg3)
> {
> $numArgs = 3; // 引数は 3
> }
> };
>
> のようなコードを書いていたとして、あとから、
>
> function someFunction($arg1, $arg2, $arg3, $arg4)
>
> みたいに引数を追加しても、$numArgs を修正しないと、
> 破綻しますけど、PHP の組み込み関数で、知ることができれば、
> 破綻しません。
そういうことになります。フォローありがとうございます。
和田さまwrote;
> こんな逃げ方はどうでしょうか? この場合 get_defined_vars()は、
> 必ず関数の先頭で実行される必要があります。
>
> ----
> <?php
> function test($a, $b, $c = 33, $d = 44, $e = 55) {
> $num = count(get_defined_vars());
> print $num;
> }
> test(1, 2, 3);
> ?>
> ----
なるほど,変数のスコープを利用しているわけですね。
とりあえずはこれで逃げれると思います。
ありがとうございます!
PHP-users メーリングリストの案内