Argüman ambalaj ve PHP yeni bir sınıf örneği başlatmasını unpacking

0 Cevap php

Python, paketi olabilir ve böylece gibi argümanlar açmak:

def myfunction(arg1, arg2, arg3):
    pass

mydict = dict(arg1='foo', arg2='bar', arg3='baz')

myfunction(**mydict)

mylist = ['foo', 'bar', 'baz']

myfunction(*mylist)

Şimdi, PHP benzer bir şey var mı? Ben bir veritabanı kaydının çıkarılan bir ilişkisel dizi ile birlikte, bir işleve geçirilen bir sınıf var. Ben dizide tuşları olarak adlandırılır aynı argümanları kabul sınıfının bir örneğini oluşturmak istiyorum. Bu yapılabilir mi?

EDIT

Tamam, bu yüzden kesinlikle doğru sorumu formüle vermedi. Ben sınıf adını, ne de önceden argümanların sayısını ne biliyorsanız ben dinamik olarak yeni bir sınıf örneğini istedi.

Ama cevap bulduk:

http://php.net/manual/en/book.reflection.php

Buradan bir çözüm var:

class MyClass {
    public function __construct($var1, $var2, $var3) {
        echo "$var1\n";
        echo "$var2\n";
        echo "$var3\n";
    }
}

$reflector = new ReflectionClass('MyClass');
$args = array('var1'=>'foo', 'var2'=>'baz', 'var3'=>'bar');
$instance = $reflector->newInstanceArgs($args);

0 Cevap