Bir PHP işleve argüman değişken sayısını geçmek için nasıl

6 Cevap php

Ben (func_num_args() ve func_get_args() kullanarak) bağımsız değişken bir sayı alır bir PHP işlevi var, ama ben fonksiyonu geçmek istediğiniz argüman sayısı bir dizinin uzunluğuna bağlıdır. Bağımsız değişken bir dizi call bir PHP fonksiyonu için bir yolu var mı?

6 Cevap

Bu (bazı dillerde uyarısı operatörü olarak bilinir) ... operatörünü kullanarak, şimdi possible with PHP 5.6.x olduğunu:

Örnek:

function addDateIntervalsToDateTime( DateTime $dt, DateInterval ...$intervals )
{
    foreach ( $intervals as $interval ) {
        $dt->add( $interval );
    }
    return $dt;
}

addDateIntervaslToDateTime( new DateTime, new DateInterval( 'P1D' ), 
        new DateInterval( 'P4D' ), new DateInterval( 'P10D' ) );

Sadece bunu diyebilirsiniz.

function test(){        
     print_r(func_get_args());
}

test("blah");
test("blah","blah");

Çıktı:

Array ([0] => blah) Array ([0] => filan [1] => blah)

For those looking for a way to do this with $object->method:
call_user_func_array(array($object, 'method_name'), $array);

Ben değişken parametrelere sahip bir değişken Method_Name çağıran bir yapı işlevi ile bu başarılı oldu.

İşte sihirli yöntemi __ invoke kullanarak bir çözümdür

(Beri Mevcut php 5.3)

class Foo {
    public function __invoke($method=null, $args=[]){
        if($method){
            return call_user_func_array([$this, $method], $args);
        }
        return false;
    }

    public function methodName($arg1, $arg2, $arg3){

    }
}

Aynı sınıfı içinden:

$this('methodName', ['arg1', 'arg2', 'arg3']);

Bir nesnenin bir örneği:

$obj = new Foo;
$obj('methodName', ['arg1', 'arg2', 'arg3'])

Yeni bir Php 5.6 (currently in beta) yerine kullanarak ... operator kullanabilir func_get_args().

Yani, bu kullanarak, size geçmek tüm parametreleri alabilirsiniz:

function manyVars(...$params) {
   var_dump($params);
}