2010-01-24 19 views
32

Sınırsız sayıda argüman alıp başka bir işleve ileten (call_another_function()) bir işlev (my_function()) oluşturmak istiyorum.PHP, func-get-args değerlerini argüman listesi olarak başka bir işleve nasıl iletilir?

function my_function() {  
    another_function($arg1, $arg2, $arg3 ... $argN);  
} 

Yani, my_function(1,2,3,4,5) arayıp

another_function(1,2,3,4,5) ben dizi olarak tüm işlev argümanları almak için func_get_args() kullanmak shoud biliyoruz çağırarak almak istiyorum, ama başka bir işleve bu argümanları geçmek nasıl bilmiyorum .

Teşekkür ederiz.

+0

Eğer parametre olarak bir dizi kabul etmek another_function değiştirilemiyor (belki bir yorum yerine yayının tamamını kullanmış olmalı)? – Aif

+0

Hayır, üçüncü taraf işlevidir :( – Kirzilla

cevap

48

call_user_func_array deneyin gibi: programlama ve bilgisayar biliminde

function my_function() {  
    $args = func_get_args(); 
    call_user_func_array("another_function", $args); 
} 

, bu apply işlev denir.

+8

içerisinde çalışır Dikkat, func_get_args işlevi başka bir işleve parametre olarak kullanılamaz! Öncelikle bağımsız değişkenleri yakalamak için geçici bir değişkene ihtiyacınız vardır. – fresch

+1

@fresch, why –

+2

@ Jordan, bu soruya bir bakın: http://stackoverflow.com/questions/4979507/difference-in-behaviour-of-func-num-args-func-get-arg-and-func- get-args-from-php –

11

Kullanım call_user_func_array

call_user_func_array('another_function', func_get_args()); 
+0

Not: Bu yalnızca PHP 5.3 + – MPV

1

Henüz belgelendirilmemiş ancak reflection API'sini, özellikle invokeArgs'yi kullanabilirsiniz.

+0

Yansıma API'sini kontrol ettim, ancak OOP PHP'm "yansıma API'sinin" pratik tarafını anlamak için çok zayıf. ( – Kirzilla

+0

Buradaki yansıma sınıfını anlamama yardımcı olan güzel URL http://www.tuxradar.com/practicalphp/16/4/0. – Kirzilla

İlgili konular