Saya punya dua kelas, class ClassOne { }
dan class ClassTwo {}
. Saya mendapatkan string yang bisa berupa "One"
atau "Two"
.
Alih-alih menggunakan switch
pernyataan panjang seperti:
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
Apakah ada cara saya bisa membuat contoh menggunakan string, yaitu new Class("Class" . $str);
?
$my_obj = Package\$class_name();
. Sebaliknya, Anda harus$class_name = "Package\\" . $class_name; $my_obj = new $class_name();
$className = '\Foo\Bar\MyClass';
$instance = new $className();
$model = $user_model::find()->All();
mana$user_model
variabel berisi string dari kelas yang dipanggilAnda cukup menggunakan sintaks berikut untuk membuat kelas baru (ini berguna jika Anda membuat pabrik ):
Sebagai metode pabrik contoh (sangat kasar):
sumber
require_once($className.'php');
->require_once($className.'.php');
lihat contoh 3 dari http://www.php.net/manual/en/language.oop5.basic.php
sumber
Katakanlah
ClassOne
didefinisikan sebagai:Menggunakan Refleksi PHP;
Buat Mesin Virtual baru:
Panggil metode:
Gunakan variabel sebagai metode:
Menggunakan Refleksi alih-alih hanya menggunakan string mentah untuk membuat objek memberi Anda kontrol yang lebih baik atas objek Anda dan lebih mudah diuji (PHPUnit sangat bergantung pada Refleksi)
sumber