wake-up-neo.com

Können PHP ein Objekt aus dem Namen der Klasse als String instanziieren?

Ist es in PHP möglich, ein Objekt aus dem Namen einer Klasse zu instanziieren, wenn der Klassenname in einer Zeichenfolge gespeichert ist?

63
user135295

Ja, definitiv.

$className = 'MyClass';
$object = new $className; 
109
brianreavis

Ja, so ist es:

<?php

$type = 'cc';
$obj = new $type; // outputs "hi!"

class cc {
    function __construct() {
        echo 'hi!';
    }
}

?>
5
Mr. Smith

Statisch auch:

$class = 'foo';
return $class::getId();
1
Andrew Atkinson

Sie können dynamisches Aufrufen durchführen, indem Sie Ihre Klassennamen/-methoden in einem Speicher wie einer Datenbank speichern .. _. Angenommen, die Klasse ist für Fehler belastbar. 

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 mit den von der Datenbank zurückgegebenen Zeichenfolgen für Klassen- und Methodennamen. Sie können sogar SQL-Abfragen für Ihre Klassen speichern. Der Automatisierungsgrad hängt von Ihrer Vorstellungskraft ab.

$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 Web-Services zu erstellen.

0
Hugo R