2013-03-30 11 views
5

Parametreleri bildirmek için ilişkisel bir dizi kullanarak bir işlevi çağırmanın bir yolu olup olmadığını merak ediyorum.PHP'de İşlevi için İlişkisel Dize'yi Çalıştırın

function test($hello, $world) { 
    echo $hello . $world; 
} 

böyle bir şey yaptığını diyoruz için bazı yolu var mı: Mesela

Ben bu fonksiyonu varsa?

call('test', array('hello' => 'First value', 'world' => 'Second value')); 

Ben call_user_func ve call_user_func_array kullanarak aşina değilim, ama ben onlar vaktinden aradığınızı parametreleri bilmiyorum çeşitli yöntemleri çağırmak için kullanabileceği daha genel bir şey arıyorum.

Düzeltme: Bunun nedeni, bir API ön ucu için tek bir arabirim oluşturmaktır. JSON'u kabul ediyorum ve bunu bir diziye dönüştürüyorum. Yani, çağırmak ve JSON girişindeki değerleri yöntemlere aktarmak için farklı yöntemler istiyorum. Bu arabirimden farklı yöntemlerin bir çeşitliliğini aramak istediğimden, hangi sıralarda olması gerektiğini bilmeden işlevlere parametreler iletmenin bir yolunu istiyorum. Yansımaları kullanmayı düşünüyorum. arıyorum.

+0

Herhangi bir sebep var mı? Neden * bunu yapmak istersiniz? –

+0

Bir API ön ucu içindir. JSON'u kabul ediyorum ve bunu bir diziye dönüştürüyorum. Yani, çağırmak ve JSON girişindeki değerleri yöntemlere aktarmak için farklı yöntemler istiyorum. – cbulock

cevap

2

için php el kitabına bakın: PHP ile

function test() { 
    $arg_list = func_get_args(); 
    echo $arg_list[0].' '.$arg_list[1]; 
} 

test('hello', 'world'); 
0

Aşağıdakiler çalışmalıdır ...

function test($hello, $world) { 
    echo $hello . $world; 
} 

$callback = 'test'; <-- lambdas also work here, BTW 

$parameters = array('hello' => 'First value', 'world' => 'Second value'); 

$reflection = new ReflectionFunction($callback); 
$new_parameters = array(); 

foreach ($reflection->getParameters() as $parameter) { 
    $new_parameters[] = $parameters[$parameter->name]; 
} 

$parameters = $new_parameters; 

call_user_func_array($callback, $parameters);