Czy w PHP można utworzyć instancję obiektu na podstawie nazwy klasy, jeśli nazwa klasy jest przechowywana w ciągu?
php
class
object
initialization
user135295
źródło
źródło
Tak to jest :
<?php $type = 'cc'; $obj = new $type; // outputs "hi!" class cc { function __construct() { echo 'hi!'; } } ?>
źródło
jeśli twoja klasa potrzebuje argumentów , powinieneś to zrobić:
class Foo { public function __construct($bar) { echo $bar; } } $name = 'Foo'; $args = 'bar'; $ref = new ReflectionClass($name); $obj = $ref->newInstanceArgs(array($args));
źródło
Statyczne też:
$class = 'foo'; return $class::getId();
źródło
Możesz wykonać dynamiczne wywołanie, przechowując nazwy / metody klas w magazynie, takim jak baza danych. Zakładając, że klasa jest odporna na błędy.
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 .. Następnie w kodzie używając ciągów zwracanych przez bazę danych dla nazw klas i metod. możesz nawet przechowywać zapytania sql dla swoich klas, poziom automatyzacji zależy od twojej wyobraźni.
$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}(); } }
Używam tej metody do tworzenia usług internetowych REST.
źródło