鍍金池/ 問答/PHP/ php 在不知道變量參數(shù)的情況下,實(shí)現(xiàn)調(diào)用想要順序

php 在不知道變量參數(shù)的情況下,實(shí)現(xiàn)調(diào)用想要順序

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

如何實(shí)現(xiàn) 調(diào)用 b 方法時(shí):

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

就是說在不知道變量是什么值的時(shí)候,實(shí)現(xiàn)賦值,調(diào)用:

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

換一個(gè)說法就是:
如何使用array('b'=>2, 'a'=>1, 'c'=>3),對(duì)b 方法進(jìn)行調(diào)用,賦值

補(bǔ)充:
就是說,我想要實(shí)現(xiàn)

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

這樣的結(jié)果,但是我并不知道哪個(gè)是$a,哪個(gè)是$b,哪個(gè)是$c

回答
編輯回答
萢萢糖

call_user_func($functionName, $arg);

2017年3月11日 19:39
編輯回答
祈歡

extract函數(shù)是不是你想要的?

2017年3月21日 06:59
編輯回答
汐顏

不知道參數(shù),這個(gè)其實(shí)可以用反射類relation來搞定

// 其中Test為類名
$ref = new ReflectionClass('Test');
// A為類下面的方法名
$method = $ref->getMethod('A');
// 開始傳遞參數(shù),其中vars為傳遞的參數(shù)集合.
$result = $method->invokeArgs(new Test(),$vars)

這個(gè)就是反射.詳細(xì)請(qǐng)查閱文檔Reflection
當(dāng)然這個(gè)是類的調(diào)用,如果是單純的方法,請(qǐng)使用ReflectionFunction,
請(qǐng)根據(jù)具體的實(shí)例來new具體的reflection

2018年3月16日 13:18
編輯回答
薔薇花

問題是否可以轉(zhuǎn)換為:當(dāng)參數(shù)列表組成一個(gè)數(shù)組時(shí),如何利用此數(shù)組調(diào)用指定方法?
答:利用 call_user_func_array
例如:

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

// 進(jìn)行題中的調(diào)用
call_user_func_array('test_for_call', $arr); // 返回 6

參考:call_user_func_array

2017年11月27日 11:56