Tanımsız Argümanlar Erişme

5 Cevap

Bir işleve argüman sınırsız miktarda geçmesi ve başlığı her birini tanımlamak için gerek kalmadan bu argümanlar tüm erişmek için bir yolu var mı. Burada daha net yapmak için bir örnek:

function doSomething($var1="", $var2="".........)
{
    // Do something with the arguments
}

Ben argümanlar bir demet tanımlamak gitmek zorunda istemiyorum. Sadece bir dizideki tüm argümanları kapmak için bir yolu var mı? Onlar tanımlanmış olsa bile? (PHP BTW)

Sonuçta bu gibi görünmelidir:

func("hello", "ya", "hi", "blah", "test", "go");

function func()
{
   //Loop Over Arguments
}

Bazı doğal PHP fonksiyonları argümanların bir görünüşte sonsuz sayıda kabul etmek mümkün gördüm, ancak kullanıcı tanımlı işlevler aynı yapabilirim?

5 Cevap

Bkz func_get_args. Bu tam olarak ne istediğinizi yapar

Evet, kesinlikle var. func_get_args(), bu tam olarak neye ihtiyacınız yapmalıyım göz atın.

Sen fonksiyonu using func_num_args() tarafından çağrıldı kaç argüman öğrenebilirsiniz. Daha sonra func_get_args() ile func_get_arg(index) kullanarak kendi dizin belirterek her argüman olsun, ya da bir dizi olarak tüm argümanlar olabilir.

Örnek:

function variable_arguments() {
    echo "This function was called with ".func_num_args()." arguments.<br />";
    echo "Those arguments were:<br /><pre>";
    echo print_r(func_get_args());
    echo "</pre>";
}

variable_arguments("Hello", 42, array(true));

Diğerleri func_get_args() kullanmadan önce yayınlanmıştır ama neden bir dizide parametrelerini geçmek için denemek değil gibi? Bunu şey saklayabilirsiniz böylece PHP gevşek yazdınız.

$params = array(1, 2, 'something');
doSomething($params);

function doSomething($params) {
    foreach ($params as $value) {
    // do something.
    }
}

Bu işlev için parametreleri beklemek geliştirici görünür kılan ve paramters dizi ile, az bir çabayla gibi yine birçok parametreleri geçirebilirsiniz çünkü bu tercih.