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