Saya tahu pertanyaan ini kedengarannya agak kabur sehingga saya akan membuatnya lebih jelas dengan sebuah contoh:
$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Ini yang ingin saya lakukan. Bagaimana Anda melakukannya? Tentunya saya bisa menggunakan eval () seperti ini:
$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Tapi saya lebih suka menjauh dari eval (). Apakah ada cara untuk melakukan ini tanpa eval ()?
$var = __NAMESPACE__ . '\\' . $var . 'Class';
Jika Anda Menggunakan Namespaces
Dalam temuan saya sendiri, saya pikir itu baik untuk menyebutkan bahwa Anda (sejauh yang saya tahu) harus menyatakan jalur namespace penuh kelas.
MyClass.php
index.php
sumber
Cara melewati parameter konstruktor dinamis juga
Jika Anda ingin meneruskan parameter konstruktor dinamis ke kelas, Anda dapat menggunakan kode ini:
Informasi lebih lanjut tentang kelas dan parameter dinamis
PHP> = 5.6
Pada PHP 5.6 Anda dapat menyederhanakan ini lebih banyak lagi dengan menggunakan Argument Unpacking :
Terima kasih kepada DisgruntledGoat karena menunjukkannya.
sumber
new $className(...$params)
sumber
Saya akan merekomendasikan metode
call_user_func()
ataucall_user_func_array
php. Anda dapat memeriksanya di sini ( call_user_func_array , call_user_func ).contoh
Jika Anda memiliki argumen yang Anda sampaikan ke metode, maka gunakan
call_user_func_array()
fungsinya.contoh.
sumber