将可变数量的参数传递给函数

时间:2014-11-14 01:27:38

标签: php reflection

我有两个班级:

class A {
    function __construct() {
        $B = new B;
        $ArgumentReflection = new ReflectionMethod($B, "b");
        $ArgumentArray = array();
        foreach($ArgumentReflection->getParameters() as $ArgumentName) {
            if(isset($Request[$ArgumentName->name])) {
             $ArgumentArray[$ArgumentName->name] =  $_REQUEST[$ArgumentName->name];
            }
        }
    }
}

class B {
    function b($one, $two, $three) {
        ...
    }
}

这是一个简化的例子。我的想法是,我可能想要在多个方法中定义多个函数,并使用不同数量的参数调用它们。我需要找到一个如何调用方法并传递它的解决方案,例如,需要$_REQUEST个变量。例如,如果我在B类中有三个函数,如下所示:

class B {
    function a($seven, $six) {

    }
    function b($one, $two, $three) {

    }
    function c($zebra, $cat, $monkey) {

    }
}

如果我将"a"传递给ReflectionMethod,我希望调用函数a,如下所示:$B->a($_REQUEST["seven"], $_REQUEST["six"])。 如果我通过"b",那么就像这样:$B->b($_REQUEST["one"], $_REQUEST["two"], $_REQUEST["three"]);等等。

很明显,php 5.6中提供的...令牌不是解决方案,

任何提示?感谢名单

1 个答案:

答案 0 :(得分:0)

好的,因为在PHP中的反思中没有记录太多,我发布了自己的答案,所有的答案都是Jack,指出我正确的方向。

ReflectionMethod继承invokeArgs函数,通过它传递一组参数。所以,最后做了我的想法,我只是在发布的代码之后添加了一行,现在它看起来像这样:

class A {
    function __construct() {
        $B = new B;
        $ArgumentReflection = new ReflectionMethod($B, "b");
        $ArgumentArray = array();
        foreach($ArgumentReflection->getParameters() as $ArgumentName) {
            if(isset($Request[$ArgumentName->name])) {
                $ArgumentArray[$ArgumentName->name] =  $_REQUEST[$ArgumentName->name];
            }
        }

        $ArgumentReflection->invokeArgs($B, $ArgumentArray);

    }
}

class B {
    function b($one, $two, $three) {
        ...
    }
}

全部完成。祝大家好运。