Fonksiyonunu kullanarak PHP dinamik prototipler

4 Cevap php

PHP bir yapı yazma nerede tür böyle, dinamik çağrı işlevi bir ayrıştırıcı determins ediyorum:

// The definition of what to call
$function_call_spec = array( "prototype"  => "myFunction", 
                             "parameters" => array( "first_par"  => "Hello",
                                                    "second_par" => "World"));

// Dispatch
$funcPrototype = $function_call_spec["prototype"];
$funcPrototype(); // Here we call function 'myFunction'.

Bu, tüm ince ve züppe. Ama şimdi ben bunu yapmak istiyorum yolu mümkün ise ben gerçekten bilmiyorum parametreleri geçirerek sonraki adım, geliyor. O yüzden buraya, dilleri bu gün ne yapabilirim komut ancak şaşırtıcı beni asla durmaz:

Bir bu gibi işleve parametreler geçebileceği:

// Here we call function 'myFunction' with the array of parameters.
$funcPrototype( $function_call_spec["parameters"] );

Ancak, açık delillerle vb ile düzgün 'myFunction' ilan etmek istiyorum:

function myFunction( $first_par, $second_par )
{

}

O zaman soru şu - sadece parametre dizisi döngü ile dinamik bir işlev parametreleri geçirmek için herhangi bir yolu var mı?

Netleştirmek için, ben don't bu gibi yapmak istiyorum:

$funcPrototype( $function_call_spec["parameters"]["first_par"],
                $function_call_spec["parameters"]["second_par"]  );

Bu statik fikrine karşı gider myFunction, ilgili ayrıntıları bilmek için kodumu gerektirdiğinden.

Bunun yerine, belki böyle bir şekilde bunu yapmak isterim:

// Special magic PHP function which can be used for invoking functions dynamically
InvokeFunction( $funcPrototype, $function_call_spec["parameters"] );

Hangi sonra myFunction çağrıldığını sonuçları ve dizideki tüm parametreler prototip her parametre değişkene iletilir.

Herhangi bir yorum bekliyoruz.

Saygılar.

/ R

PS: Bu mesajda kod hiçbiri yazım hataları vs için test edilmiştir

4 Cevap

call_user_func_array($funcPrototype, $function_call_spec["parameters"]);

Gibi sizin tercihinize, bu isimler işlevi bir sarıcı oluşturmak isteyebilirsiniz:

function InvokeFunction($function, $args = array()) {
    return call_user_func_array($function, (array)$args);
}

Bu fonksiyon ile 3 farklı şekillerde arayabilirsiniz:

$return = InvokeFunction('doStuff');
$return = InvokeFunction('doStuff', $single_arg);
$return = InvokeFunction('doStuff', $multiple_args);

call_user_func_array() aksi kullanmak, sözleşmeyi uygulamak gerek yoksa iyi seçimdir ReflectionFunction.

http://us2.php.net/create_function

Eğer create_function () kullandığınızda, argümanlar çalışma zamanı kadar değerlendirilir değil. Oldukça tatlı.