php 在不知道变量参数的情况下,实现调用想要顺序

class Test
{
    public function A ($a, $b, $c)
    {
    }
}
$a =1;
$b =2;
$c =3;

如何实现 调用 b 方法时:

b($a,$b,$c)
b($b,$a,$c)

就是说在不知道变量是什么值的时候,实现赋值,调用:

b(1,2,3)
b(2,1,3)

换一个说法就是:
如何使用array('b'=>2, 'a'=>1, 'c'=>3),对b 方法进行调用,赋值

补充:
就是说,我想要实现

b(1,2,3)
b(2,1,3)

这样的结果,但是我并不知道哪个是$a,哪个是$b,哪个是$c

阅读 3.1k
3 个回答

不知道参数,这个其实可以用反射类relation来搞定

// 其中Test为类名
$ref = new ReflectionClass('Test');
// A为类下面的方法名
$method = $ref->getMethod('A');
// 开始传递参数,其中vars为传递的参数集合.
$result = $method->invokeArgs(new Test(),$vars)

这个就是反射.详细请查阅文档Reflection
当然这个是类的调用,如果是单纯的方法,请使用ReflectionFunction,
请根据具体的实例来new具体的reflection

extract函数是不是你想要的?

问题是否可以转换为:当参数列表组成一个数组时,如何利用此数组调用指定方法?
答:利用 call_user_func_array
例如:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
);
function test_for_call($a, $b, $c)
{
    return $a + $b + $c;
}

// 进行题中的调用
call_user_func_array('test_for_call', $arr); // 返回 6

参考:call_user_func_array

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏