Ist es in PHP möglich, ein Objekt aus dem Namen einer Klasse zu instanziieren, wenn der Klassenname in einer Zeichenfolge gespeichert ist?
php
class
object
initialization
user135295
quelle
quelle
Ja, das ist es :
<?php $type = 'cc'; $obj = new $type; // outputs "hi!" class cc { function __construct() { echo 'hi!'; } } ?>
quelle
Wenn Ihre Klasse Argumente benötigt , sollten Sie Folgendes tun:
class Foo { public function __construct($bar) { echo $bar; } } $name = 'Foo'; $args = 'bar'; $ref = new ReflectionClass($name); $obj = $ref->newInstanceArgs(array($args));
quelle
Auch statisch:
$class = 'foo'; return $class::getId();
quelle
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.
quelle