[PHP-users 14238] Re: 引数の数を調べる

WADA Masashi php-users@php.gr.jp
2003年 3月 25日 (火) 01:25:14 JST


 和田です。

Shindo wrote:
>ファイルが自分のファイル名を知っているから__FILE__であり
>各行が自分の位置を知っているから__LINE__なのでしょう。
>であれば「__FUNC_NUM_ARGS__」が存在すればそれを使いますが
>別の関数を呼んだり、コードを追加してまで引数の数を使いたいとは
>思いません。

 かなり妥協するなら、さらにこんな逃げ方もありかなと。私は今まで、
関数の引数の数が必要になった経験がないので、必要性についてはなん
とも言えないのですが・・・。

----------------------------------------
<?php

define("GET_ARG_NUM", 'return count(get_defined_vars())-(isset($this)?1:0);');

class test
{
    var $v;
    function test() {
        $this->v = 1;
    }
    function func1($a, $b, $c = 3) {
        $num = eval(GET_ARG_NUM);
        var_dump($num);
    }
}

function func2($this, $b, $c = 3) {
    $num = eval(GET_ARG_NUM);
    var_dump($num);
}

$o = new test();
$o->func1(1, 2);

func2(1, 2);

?>
----------------------------------------

 ただし function func($a, $b, $this) {...} という関数を作られた
らアウトです。

 PHP側で簡単に対応できないのかなと思って、
zend_builtin_functions.c の ZEND_FUNCTION(func_num_args) を見て
みましたが・・・よく分かりません :-|。argument_stack から取得で
きないのかな。


----
和田雅志 (WADA Masashi)
wada@hh.iij4u.or.jp




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