Christian Seiler: Zeitverlust bei bedingten includes, Speicherverbrauch

Beitrag lesen

Hi,

Kannst Du mir in diesem Zusammenhang erklären, was man unter einer "Reflection API" versteht (und ob diese für PHP auch existiert -> http://www.php.net/manual/de/language.oop5.reflection.php, das muss sie wohl sein?)?

Ja, der Link zeigt auf das entsprechende von PHP.

Reflection ist die Möglichkeit, sich dynamisch Informationen über die Laufzeitumgebung zu machen. Das heißt: Du kannst dynamisch zur Laufzeit herausbekommen, welche Methoden in einer Klasse existieren. Welche Interfaces eine Klasse implementiert. Welche Parameter bestimmte Methoden haben. Und so weiter, und so fort.

Ein Beispiel, wo Reflection hilfreich sein kann: Plugins. Wenn ein Plugin eine Klasse ist, dann kann man mit Reflection zum Beispiel abfragen, welche Methoden die Klasse hat - und damit zum Beispiel für Methoden, die bestimmten selbst festgelegten Namenskonventionen folgen, automatisch ein Formular mit Konfigurationsoptionen anbieten. Mal ein stark vereinfachtes Beispiel:

class LdapAuthPlugin {  
  public function setHost ($value) { ... }  
  public function setPort ($value) { ... }  
  public function setFilter ($value) { ... }  
}

Mit Reflection kann man jetzt z.B. folgendes machen:

* $class = new ReflectionClass ($pluginClass);
   ($pluginClass sei hier z.B. 'LdapAuthPlugin')

* $methods = $class->getMethods();
   $methods ist jetzt ien Array das alle Methoden der Klasse enthält

* $methods durchgehen und alle Methoden die mit 'set' anfangen abgreifen

* 'set' aus dem Methodennamen entfernen

* Ein Formular erzeugen, das 3 Einträge enthält, für Host, Port und
   Filter. Damit wird das Plugin konfiguriert.

* Beim Nutzen des Plugins die 3 konfigurierten Werte setzen.

Das nur mal als Abriss, wofür Reflection gut sein könnte. Es gibt auch andere Beispiele, wo das hilfreich sein könnte.

Viele Grüße,
Christian