Heim > Backend-Entwicklung > PHP-Tutorial > Verwenden von Merkmalen in PHP 5.4

Verwenden von Merkmalen in PHP 5.4

Joseph Gordon-Levitt
Freigeben: 2025-02-28 10:15:55
Original
215 Leute haben es durchsucht

Handbuch zur Verwendung von Merkmalen in PHP 5.4

Using Traits in PHP 5.4

Kernpunkte

  • Der in PHP 5.4 eingeführte Merkmalsmechanismus ermöglicht die horizontale Wiederverwendung von Code zwischen unabhängigen Erbungshierarchie, die Lösung der Einschränkungen der einzelnen Vererbung und zur Reduzierung der Code -Duplikation.
  • einzelne Klasse kann mehrere Merkmale verwenden, und Merkmale können auch aus anderen Merkmalen bestehen, die eine flexible und modulare Art der Organisation von Code ermöglichen.
  • Verwenden Sie das Schlüsselwort insteadof, um Konflikte zwischen Merkmalen mit demselben Methodennamen zu lösen, oder um mithilfe des Schlüsselworts as Methoden zu erstellen.
  • Merkmale können auf private Eigenschaften oder Methoden einer Verbundklasse zugreifen und umgekehrt und sogar abstrakte Methoden enthalten, die die zusammengesetzte Klasse implementieren muss.

Ein wichtiges Ziel der objektorientierten Programmierung ist die Minimierung der Code-Duplikation durch bessere Organisation und Code-Wiederverwendung. In PHP kann dies jedoch aufgrund der Einschränkungen des einzelnen Vererbungsmodells, das es verwendet, manchmal schwierig sein. Sprachen wie C und Python ermöglichen es uns, aus mehreren Klassen zu erben, was dieses Problem in gewissem Maße löst, während Mixin in Ruby es uns ermöglicht, die Funktionalität eines oder mehrerer Klassen ohne Erbschaft zu mischen. Multiple Vererbung hat jedoch Probleme wie Diamantprobleme, und Mixin ist auch ein komplexer Mechanismus. In diesem Artikel werde ich Merkmale diskutieren, eine neue Funktion, die in PHP 5.4 eingeführt wird, um solche Probleme zu überwinden. Das Konzept der Merkmale selbst ist in der Programmierung nicht neu und wird in anderen Sprachen wie Scala und Perl verwendet. Sie ermöglichen es uns, Code zwischen unabhängigen Klassen mit verschiedenen Klassen horizontal wiederzuverwenden, die Hierarchien erben.

Merkmals Erscheinungsbild

Das

-Merkmal ähnelt einer abstrakten Klasse, die nicht separat instanziiert werden kann (obwohl es häufiger im Vergleich zu einer Schnittstelle verglichen wird). Das PHP -Dokument definiert Merkmale wie folgt: & GT; Der Zweck von Merkmalen ist es, einige der Einschränkungen der einzelnen Vererbung zu verringern, indem Entwickler die Methodensätze in mehreren unabhängigen Klassen frei wiederverwenden können (existieren in verschiedenen Klassenbildern).

Betrachten wir dieses Beispiel:

<?php
class DbReader extends Mysqli
{
}

class FileReader extends SplFileObject
{
}
Nach dem Login kopieren
Nach dem Login kopieren

Es wäre ein Problem, wenn beide Klassen eine gemeinsame Funktionalität erfordern, z. B. sie beide Singletons zu machen. Da PHP keine Mehrfachvererbung unterstützt, muss jede Klasse den erforderlichen Code implementieren, der das Singleton -Muster unterstützt, oder es wird eine bedeutungslose Erbschaftshierarchie geben. Merkmale bieten eine Lösung für diese Art von Problem.

<?php
trait Singleton
{
    private static $instance;

    public static function getInstance() {
        if (!(self::$instance instanceof self)) {
            self::$instance = new self;
        }
        return self::$instance;
    }
}

class DbReader extends ArrayObject
{
    use Singleton;
}

class  FileReader
{
    use Singleton;
}
Nach dem Login kopieren
Nach dem Login kopieren

Singleton -Merkmal wird in einer direkten Implementierung von Singleton -Muster mit einer statischen Methode getInstance() implementiert, die dieses Merkmal verwendet, um ein Objekt der Klasse zu erstellen (wenn auch nicht bereits erstellt) und zurücksend. Versuchen wir, Objekte dieser Klassen mithilfe der getInstance() -Methode zu erstellen.

<?php
class DbReader extends Mysqli
{
}

class FileReader extends SplFileObject
{
}
Nach dem Login kopieren
Nach dem Login kopieren

Wir können sehen, dass $a ein Objekt von DbReader und $b ein Objekt von FileReader ist, aber beide erscheinen jetzt als Singletons. Die Methode von Singleton wurde horizontal in die Klasse injiziert, die sie verwendet. Merkmale verleihen der Klasse keine zusätzliche Semantik. Bis zu einem gewissen Grad können Sie sich als Compiler-unterstützten Kopiermechanismus vorstellen, bei dem die Methoden von Merkmalen in eine zusammengesetzte Klasse kopiert werden. Wenn wir nur $instance aus der übergeordneten Klasse mit einem privaten DbReader -attribut unterklassen, wird das Attribut nicht in der Dump von ReflectionClass::export() angezeigt. Mit Merkmalen ist es jedoch da!

<?php
trait Singleton
{
    private static $instance;

    public static function getInstance() {
        if (!(self::$instance instanceof self)) {
            self::$instance = new self;
        }
        return self::$instance;
    }
}

class DbReader extends ArrayObject
{
    use Singleton;
}

class  FileReader
{
    use Singleton;
}
Nach dem Login kopieren
Nach dem Login kopieren

Mehrere Merkmale

Bisher haben wir in einer Klasse nur ein Merkmal verwendet, aber in einigen Fällen müssen wir möglicherweise die Funktionalität mehrerer Merkmale zusammenführen.

<?php
$a = DbReader::getInstance();
$b = FileReader::getInstance();
var_dump($a);  //object(DbReader)
var_dump($b);  //object(FileReader)
Nach dem Login kopieren

Hier haben wir zwei Merkmale, Hello und World. Hello Merkmal kann nur "Hallo" sagen, World kann nur "Welt" sagen. In der MyWorld -Klasse haben wir Hello und World so angewendet, dass das MyWorld -Objekt Methoden aus diesen beiden Merkmalen hat und "Hallo Welt" sagen kann.

Merkmale aus Merkmalen

Wenn die Anwendung wächst, werden wir wahrscheinlich eine Reihe von Merkmalen in verschiedenen Klassen verwenden. PHP 5.4 ermöglicht es uns, Merkmale aus anderen Merkmalen zu bestehen, damit wir nur mehrere Merkmale in einen Merkmal einbeziehen müssen, anstatt mehrere Merkmale in all diesen Klassen. Auf diese Weise können wir das vorherige Beispiel wie folgt umschreiben:

<code>Class [  class FileReader ] {
  @@ /home/shameer/workplace/php54/index.php 19-22

  - Constants [0] {
  }
  - Static properties [1] {
    Property [ private static $_instance ]
  }
  - Static methods [1] {
    Method [  static public method instance ] {
      @@ /home/shameer/workplace/php54/index.php 6 - 11
    }
  }
  - Properties [0] {
  }
  - Methods [0] {
  }
}</code>
Nach dem Login kopieren

Hier haben wir das HelloWorld -Merkmal erstellt, die Hello und World -Merkmale verwendet und es in die MyWorld aufgenommen. Da HelloWorld Merkmal Methoden aus den beiden anderen Merkmalen hat, ist es genau das gleiche, als ob wir diese beiden Merkmale selbst in die Klasse aufgenommen haben.

(Der folgende Inhalt wird aufgrund von Platzbeschränkungen und beibehaltenen Kerninformationen kurz zusammengefasst)

Prioritätsreihenfolge: Die Merkmalsmethode hat eine höhere Priorität als die übergeordnete Klassenmethode, und die Klassenmethode hat eine höhere Priorität als die Merkmalsmethode.

Konfliktlösung und Alias: Verwenden Sie insteadof, um auszuwählen, welche Merkmalsmethode verwendet werden soll, und verwenden Sie as, um einen Methode -Alias ​​zu erstellen, um Konflikte zu vermeiden.

Reflexion: ReflectionClass getTraits() bietet Methoden zur Erhöhung von Merkmalsinformationen in einer Klasse, wie getTraitNames(), isTrait(), getTraitAliases() und

.

Andere Merkmale:

Merkmale können auf private Eigenschaften und Methoden einer kombinierten Klasse zugreifen, und umgekehrt können Merkmale abstrakte Methoden enthalten, wodurch die kombinierte Klasse diese Methoden implementiert werden kann.

Zusammenfassung:

Merkmale sind eine der leistungsstärksten Funktionen, die in PHP 5.4 eingeführt wurden, und in diesem Artikel werden fast alle Funktionen erörtert. Sie ermöglichen Programmierern, Code -Snippets horizontal zwischen mehreren Klassen wiederzuverwenden, die nicht in derselben Erbschaftshierarchie enthalten sind. Sie bieten eher einen leichten Code -Wiederverwendungsmechanismus als einen komplexen Semantik. Obwohl es einige Nachteile von Merkmalen gibt, können sie sicherlich dazu beitragen, das Design Ihrer Anwendung zu verbessern, die Code -Duplikation zu beseitigen und sie trockener zu gestalten.

(Der FAQS -Teil wird hier aufgrund der Länge des Artikels weggelassen. Kerninformationen wurden im obigen Inhalt behandelt.)

Das obige ist der detaillierte Inhalt vonVerwenden von Merkmalen in PHP 5.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage