在PHP中,如果类名存储在字符串中,是否可以从类名实例化对象?
发布于 2009-09-04 03:29:18
是的,当然。
$className = 'MyClass';
$object = new $className;
发布于 2017-07-12 23:22:02
也是静态的:
$class = 'foo';
return $class::getId();
发布于 2017-08-18 14:23:30
您可以通过将您的类名/方法存储在诸如数据库之类的存储中来执行一些动态调用。假设类对错误是有弹性的。
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
等等。然后在您的代码中使用数据库返回的字符串作为类和方法的名称。您甚至可以为您的类存储sql查询,如果自动化程度达到您的想象的话。
$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}();
}
}
我使用此方法来创建REST web服务。
https://stackoverflow.com/questions/1377052
复制相似问题