Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des in thinkPHP5 eingeführten Beispielcodes für Merkmale

Detaillierte Erläuterung des in thinkPHP5 eingeführten Beispielcodes für Merkmale

伊谢尔伦
伊谢尔伦Original
2017-07-03 11:10:162009Durchsuche

ThinkPHP 5.0 begann, die Trait-Funktion (PHP5.4+) als Erweiterungsmechanismus zu verwenden, um mehrere Vererbungsprobleme in einer Klassenbibliothek einfach zu implementieren.

Traits ist ein Code-Wiederverwendungsmechanismus, der für Sprachen mit einfacher Vererbung wie PHP vorbereitet ist. Merkmale sollen die Einschränkungen von Sprachen mit einfacher Vererbung verringern und Entwicklern die freie Wiederverwendung von Methodensätzen in unabhängigen Klassen innerhalb verschiedener Hierarchien ermöglichen. Die Semantik von Merkmalen und die Klassenzusammensetzung definieren eine Möglichkeit, die Komplexität zu reduzieren und die typischen Probleme zu vermeiden, die mit traditioneller Mehrfachvererbung und Mixins verbunden sind.

Da die PHP5.4-Version jedoch das automatische Laden von Merkmalen nicht unterstützt, müssen Sie bei der PHP5.4-Version die Trait-Klassenbibliothek manuell importieren Das System stellt eine Hilfsfunktion load_trait zur Verfügung, mit der die Merkmalsklassenbibliothek automatisch geladen werden kann. So kann beispielsweise die Merkmalsklassenbibliothek korrekt eingeführt werden.

namespace app\index\controller;
load_trait('controller/Jump'); // 引入traits\controller\Jump
class index
{
   use \traits\controller\Jump;
   public function index()
   {
     $this->assign('name','value');
     $this->show('index');
   }
}

Wenn Ihre PHP-Version größer als 5.5 ist, können Sie die Funktion „load_trait“ weglassen und trait einführen.

namespace app\index\controller;
class index
{
   use \traits\controller\Jump;
   public function index()
   {
   }
}

kann die Einführung mehrerer Merkmalsklassenbibliotheken gleichzeitig unterstützen, zum Beispiel:

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other;
   use \traits\controller\Jump;
   public function index()
   {
   }
}

oder verwenden Sie

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other,\traits\controller\Jump;
   public function index()
   {
   }
}

Das System stellt einige bereit Bibliothek für gekapselte Merkmalsklassen, die hauptsächlich für Erweiterungen von Controller und Model Class verwendet wird. Der Stamm--Namespace der integrierten Merkmalsbibliotheken dieser Systeme verwendet Merkmale anstelle von Merkmalen, um Konflikte mit Systemschlüsselwörtern zu vermeiden.

Über Merkmale eingeführte Klassenbibliotheken müssen auf die Priorität achten, die von durch das Merkmal eingefügten Mitgliedern überschrieben wird. Die Rangfolge besteht darin, dass Mitglieder der aktuellen Klasse die Methoden des Merkmals überschreiben und das Merkmal die geerbten Methoden überschreibt.

Die Merkmalsklasse unterstützt nicht die Definition von Klassenkonstanten. Die im Merkmal definierten Eigenschaften können in der aktuellen Klasse oder in geerbten Klassen nicht neu definiert werden.

Konfliktlösung

Wir können mehrere Merkmalsbibliotheken in eine Klassenbibliothek einführen, wenn beide Merkmale eine Methode mit demselben Namen definieren, sofern keine explizite Lösung des Konflikts vorliegt führt zu einem schwerwiegenden Fehler.

Um den Namenskonflikt mehrerer Merkmale in derselben Klasse zu lösen, müssen Sie den Stattoperator verwenden, um explizit anzugeben, welche der widersprüchlichen Methoden verwendet werden sollen.

Mit der obigen Methode können nur andere Methoden ausgeschlossen werden. Der as-Operator kann eine der widersprüchlichen Methoden unter einem anderen Namen einführen.

Weitere Informationen zu Merkmalen finden Sie im offiziellen PHP-Handbuch.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des in thinkPHP5 eingeführten Beispielcodes für Merkmale. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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