function War($a,$b,$c)
{
$n = func_num_args();
echo $n;
}War(1,2,3);
func_num_args()这个函数只能在函数里面获取参数个数而不能在函数外部获取,有什么方法能在外部获取函数参数的个数呢?

解决方案 »

  1.   

    func_num_args()得到的是传递给宿主函数的参数个数
      

  2.   

    func_num_args()得到的是实际传递的参数个数,而不是预定义个数,所以不应该有“外部获得”的说法
    function War()
    {
    $n = func_num_args();
    echo $n;
    }
    War(1,2,3);
    War(1,2,3,4);
    War(1,2);
      

  3.   

    实在要在“外部获取”倒是可以利用自定义函数的注释,用反射来获取
    <?php
    /**
     * 某自定义函数
     *
     * @param string $a
     * @param string $b
     * @param string $c
     */
    function War($a,$b,$c){}/**
     * 某自定义函数2
     *
     * @param string $a
     * @param string $b
     */
    function War2($a,$b){}function get_func_params($func)
    {
    $r = new ReflectionFunction($func);
    $str = $r->getDocComment();
    preg_match_all('/@param/',$str,$m);
    return count($m[0]);
    }
    echo 'War:'.get_func_params('War');
    echo ',War2:'.get_func_params('War2');
    ?>
      

  4.   

    问题是这些类作为控制器,无法每个都写上DOC,以URL后面一截作为参数,查了下文档,发现没有此类函数,但是ZEND FRM确实是这样实现的,还是有时间看看ZEND FRM的源码   谢谢了