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