Ist es in PHP möglich, ein Objekt aus dem Namen einer Klasse zu instanziieren, wenn der Klassenname in einer Zeichenfolge gespeichert ist?
Ist es in PHP möglich, ein Objekt aus dem Namen einer Klasse zu instanziieren, wenn der Klassenname in einer Zeichenfolge gespeichert ist?
Antworten:
Ja, auf jeden Fall.
$className = 'MyClass';
$object = new $className;
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
Auch statisch:
$class = 'foo';
return $class::getId();
Sie können einen dynamischen Aufruf durchführen, indem Sie Ihre Klassennamen / Methoden in einem Speicher wie einer Datenbank speichern. Angenommen, die Klasse ist widerstandsfähig gegen Fehler.
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
etc .. Dann in Ihrem Code unter Verwendung der von der Datenbank zurückgegebenen Zeichenfolgen für Klassen- und Methodennamen. Sie können sogar SQL-Abfragen für Ihre Klassen speichern, wobei der Automatisierungsgrad Ihren Vorstellungen entspricht.
$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}();
}
}
Ich verwende diese Methode, um REST-Webdienste zu erstellen.