Ausführliche Erklärung und Beispielcode für die Reflexion in PHP

高洛峰
Freigeben: 2023-03-04 07:48:01
Original
1307 Leute haben es durchsucht

Kürzlich habe ich Java-Programmierideen gelesen und das Kapitel über Typinformationen gesehen, in dem es um Klasseninformationen und das Konzept der Reflexion ging. Sehen wir uns übrigens die Reflexionstools von PHP an. Im Handbuch heißt es: „PHP 5 verfügt über eine vollständige Reflection-API, die die Möglichkeit bietet, Klassen, Schnittstellen, Funktionen, Methoden und Erweiterungen zurückzuentwickeln. Darüber hinaus bietet die Reflection-API Methoden zum Herausnehmen von Funktionen, Klassen und Methoden.“ Dokumentationskommentar. „Natürlich ist das Handbuch etwas abstrakt!“ Das sogenannte Reverse Engineering bedeutet, dass Sie detaillierte Informationen zu Klassen, Methoden, Attributen, Parametern usw. erhalten können, einschließlich Kommentaren. Der Text ist beispielsweise immer so langweilig Wert einer bestimmten Klasse. Verwandte Informationen, wie Eigenschaften, Methoden, Namespaces, welche Schnittstellen implementiert sind usw.! Im vorherigen Beispiel hat ReflectionClass::getProperties ein Array von ReflectionProperty-Objekten zurückgegeben.

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
   
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}
 
$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."\n";
}
 
//output
//foo 
//bar
//baz
Nach dem Login kopieren
Die ReflectionProperty-Klasse meldet Informationen über die Eigenschaften einer Klasse. Zum Beispiel isDefault isPrivate isProtected isPublic isStatic usw. Die Methode getName dient dazu, den Namen des Attributs abzurufen!

Die oben genannten dienen zum Abrufen von Attributen, und es gibt auch Methoden zum Abrufen von Klassenmethoden, wie z. B.

ReflectionClass::getMethod ist ein ReflectionMethod-Typ. Die ReflectionMethod-Klasse meldet Informationen über a Methode, wie isAbstract isPrivate isProtected isPublic isStatic isConstructor, es gibt auch eine wichtige Methode Invoke, InvokeArgs ist die Ausführungsmethode!

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
   
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}
 
$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());
Nach dem Login kopieren
Für andere Objekte können Sie das Handbuch lesen, es ist nicht schwierig!

Welchen Nutzen hat Reflexion?

Reflection ist ein dynamisch laufendes Konzept. Zusammen können sie uns bei der Analyse anderer Klassen, Schnittstellen, Methoden, Eigenschaften, Methoden und Erweiterungen helfen. Es können auch Muster erstellt werden, beispielsweise dynamische Proxys. Es ist auch sehr üblich, Reflektion in einigen PHP-Frameworks wie Kohana und Yii zu verwenden. Das Folgende ist der Code von Kohana zum Implementieren von MVC, der Reflektion verwendet!

Der obige Code zeigt deutlich den Prozess dieses Frameworks! Über den Router verarbeiten Sie tatsächlich die URL-Klasse. Über den Router können Sie ermitteln, welcher Controller und welche Methode verwendet wird. Dann führen Sie die Methode aus!

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);
Nach dem Login kopieren
Das Obige ist die Sammlung von Informationen zur PHP-Reflexion. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung dieser Website.

Ausführlichere Erläuterungen zur PHP-Reflexion und Artikel zum Beispielcode finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!