Trong PHP có thể khởi tạo một đối tượng từ tên của một lớp không, nếu tên lớp được lưu trữ trong một chuỗi?
Trong PHP có thể khởi tạo một đối tượng từ tên của một lớp không, nếu tên lớp được lưu trữ trong một chuỗi?
Câu trả lời:
Chắc chắn rồi.
$className = 'MyClass';
$object = new $className;
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
Tĩnh quá:
$class = 'foo';
return $class::getId();
Bạn có thể thực hiện một số lệnh gọi động bằng cách lưu trữ (các) tên lớp / phương thức của bạn trong một bộ lưu trữ chẳng hạn như cơ sở dữ liệu. Giả sử rằng lớp có khả năng phục hồi cho các lỗi.
sample table my_table
classNameCol | methodNameCol | dynamic_sql
class1 | method1 | 'select * tablex where .... '
class1 | method2 | 'select * complex_query where .... '
class2 | method1 | empty use default implementation
vv .. Sau đó, trong mã của bạn bằng cách sử dụng các chuỗi được cơ sở dữ liệu trả về cho các lớp và tên phương thức. bạn thậm chí có thể lưu trữ các truy vấn sql cho các lớp học của mình, mức độ tự động hóa nếu tùy theo trí tưởng tượng của bạn.
$myRecordSet = $wpdb->get_results('select * from my my_table')
if ($myRecordSet) {
foreach ($myRecordSet as $currentRecord) {
$obj = new $currentRecord->classNameCol;
$obj->sql_txt = $currentRecord->dynamic_sql;
$obj->{currentRecord->methodNameCol}();
}
}
Tôi sử dụng phương pháp này để tạo dịch vụ web REST.