Heim > Backend-Entwicklung > PHP-Tutorial > Detailliertes Beispiel für die Verwendung von Trait durch PHP zur Lösung des PHP-Einzelvererbungsproblems

Detailliertes Beispiel für die Verwendung von Trait durch PHP zur Lösung des PHP-Einzelvererbungsproblems

coldplay.xixi
Freigeben: 2023-04-08 20:24:01
nach vorne
2438 Leute haben es durchsucht

Detailliertes Beispiel für die Verwendung von Trait durch PHP zur Lösung des PHP-Einzelvererbungsproblems

PHP verwendet Trait, um das PHP-Einzelvererbungsproblem im Detail zu lösen

In diesem Artikel wird hauptsächlich die Verwendung vorgestellt von PHP Trait löst das Problem der PHP-Einzelvererbung. Es analysiert detailliert die relevanten Betriebstechniken und Vorsichtsmaßnahmen für die Verwendung von PHP, um die PHP-Einzelvererbung in Form von Beispielen zu implementieren >Die Beispiele in diesem Artikel beschreiben die Verwendung von Trait in PHP. Lösen Sie das PHP-Einzelvererbungsproblem. Teilen Sie es allen als Referenz mit. Die Einzelheiten lauten wie folgt:

Was ist Vererbung?

Vererbung ist eigentlich eine Beziehung zwischen zwei Klassen, die in der objektorientierten Programmierung existiert. Sie ist ein wichtiges Mittel zur objektorientierten Programmierung. Programme können durch Vererbung effektiver organisiert werden Beziehung zwischen Klassen und Nutzung vorhandener Klassen, um komplexere und tiefgreifendere Entwicklungen durchzuführen.

Wenn eine Klasse alle Daten und Operationen einer anderen Klasse besitzt, spricht man von einer Vererbungsbeziehung zwischen den beiden Klassen.

Die geerbte Klasse wird als übergeordnete Klasse bezeichnet, und die Klasse, die alle Daten und Operationen der übergeordneten Klasse erbt, wird als Unterklasse bezeichnet.

Verwenden Sie Erweiterungen in PHP, um die Vererbungsbeziehung zwischen der Unterklasse und der übergeordneten Klasse anzugeben.

Bei der objektorientierten Programmierung kann die Verwendung von Vererbung zur Organisation von Klassen im Designsystem die Abstraktion des Programms verbessern, es der menschlichen Denkweise näher bringen, die Programmstruktur klarer machen und Codierung und Wartung reduzieren Arbeitsbelastung.

Einfache Vererbung bedeutet, dass jede Klasse nur eine einzige übergeordnete Klasse hat und ihre Struktur durch eine einfache Baumstruktur dargestellt werden kann. Mehrfachvererbung bedeutet, dass eine Klasse mehr als eine übergeordnete Klasse und ihre statischen Daten haben kann Attribute und Operationen werden von allen diesen übergeordneten Klassen geerbt und ihre Struktur sollte in einer komplexen Netzwerkstruktur dargestellt werden.

PHP unterstützt nur die Einzelvererbung, während die Mehrfachvererbung über Schnittstellen oder Merkmale implementiert wird.

Beispiel für Einzelvererbung in PHP

// 单继承:一个子类只能有一个父类
class A{
  function show() {
    echo "A";
  }
}
 
class B{
  function show() {
    echo "B";
  }
}
 
class C extends A{
 
}
 
$c = new C;
$c->show();
Nach dem Login kopieren

Verwenden Sie Trait, um Einzelvererbung in PHP zu lösen

Selbst Ab PHP 5.4.0 implementiert PHP eine Methode zur Code-Wiederverwendung namens Traits.

Trait ist ein Code-Wiederverwendungsmechanismus, der für Einzelvererbungssprachen wie PHP vorbereitet ist, um die Einschränkungen einzelner Vererbungssprachen zu reduzieren und Entwicklern die freie Wiederverwendung in unabhängigen Klassen in verschiedenen Hierarchien zu ermöglichen Die Kombination von methodTrait und Class definiert eine Möglichkeit, die Komplexität zu reduzieren und die typischen Probleme im Zusammenhang mit herkömmlicher Mehrfachvererbung und Mixin-Klassen zu vermeiden, die nicht durch das Trait selbst instanziiert werden können

Beispiel:

<?php
  trait Reader{
   public function add($var1,$var2){
     return $var1+$var2;
   }
  }
  trait writer {
   public function multiplication($var1,$var2){
     return $var1*$var2;
   }
  }
  class File {
   use Reader;
   use writer;
   public function calculate($var1,$var2){
     echo "Ressult of addition:".$this->add($var1,$var2) ."\n";
     echo "Ressult of multiplication:".$this->multiplication($var1,$var2);
   }
  }
  $o = new File();
  $o->calculate(5,3);
Nach dem Login kopieren

Mehrere Merkmale

Durch Kommas getrennt werden mehrere Merkmale in der Verwendungsanweisung aufgelistet und können alle in eine Klasse eingefügt werden.

<?php
trait Hello {
  public function sayHello() {
    echo &#39;Hello &#39;;
  }
}
 
trait World {
  public function sayWorld() {
    echo &#39;World&#39;;
  }
}
 
class MyHelloWorld {
  use Hello, World;
  public function sayExclamationMark() {
    echo &#39;!&#39;;
  }
}
 
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
Nach dem Login kopieren

Konfliktlösung

Wenn zwei Merkmale eine Methode mit demselben Namen einfügen, wird ein schwerwiegender Fehler generiert, wenn der Konflikt nicht explizit gelöst wird.

Um den Namenskonflikt mehrerer Merkmale in derselben Klasse zu lösen, müssen Sie den Statt-Operator 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 einen Alias ​​für eine Methode einführen. Beachten Sie, dass der as-Operator weder die Methode umbenennt noch deren Methoden beeinflusst.

Beispiel:

<?php
trait A {
  public function smallTalk() {
    echo &#39;a&#39;;
  }
  public function bigTalk() {
    echo &#39;A&#39;;
  }
}
 
trait B {
  public function smallTalk() {
    echo &#39;b&#39;;
  }
  public function bigTalk() {
    echo &#39;B&#39;;
  }
}
 
class Talker {
  use A, B {
    B::smallTalk insteadof A;
    A::bigTalk insteadof B;
  }
}
 
class Aliased_Talker {
  use A, B {
    B::smallTalk insteadof A;
    A::bigTalk insteadof B;
    B::bigTalk as talk;
  }
}
Nach dem Login kopieren

Merkmale aus Merkmalen zusammensetzen

So wie Klassen Merkmale verwenden können, können auch andere Merkmale Merkmale verwenden. Durch die Verwendung eines oder mehrerer Merkmale beim Definieren eines Merkmals können Sie einige oder alle Mitglieder anderer Merkmale kombinieren.

<?php
trait Hello {
  public function sayHello() {
    echo &#39;Hello &#39;;
  }
}
 
trait World {
  public function sayWorld() {
    echo &#39;World!&#39;;
  }
}
 
trait HelloWorld {
  use Hello, World;
}
 
class MyHelloWorld {
  use HelloWorld;
}
 
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
Nach dem Login kopieren

Abstrakte Mitglieder von Trait

Um Anforderungen an die verwendeten Klassen durchzusetzen, unterstützen Traits die Verwendung abstrakter Methoden.

<?php
trait Hello {
  public function sayHelloWorld() {
    echo &#39;Hello&#39;.$this->getWorld();
  }
  abstract public function getWorld();
}
 
class MyHelloWorld {
  private $world;
  use Hello;
  public function getWorld() {
    return $this->world;
  }
  public function setWorld($val) {
    $this->world = $val;
  }
}
Nach dem Login kopieren

Statische Mitglieder von Trait

Traits können durch statische Mitglieder und statische Methoden definiert werden.

<?php<br>// 静态成员
trait Counter {
  public function inc() {
    static $c = 0;
    $c = $c + 1;
    echo "$c\n";
  }
}
 
class C1 {
  use Counter;
}
 
class C2 {
  use Counter;
}
 
$o = new C1(); $o->inc(); // echo 1
$p = new C2(); $p->inc(); // echo 1
Nach dem Login kopieren
<?php
// 静态方法
trait StaticExample {
  public static function doSomething() {
    return &#39;Doing something&#39;;
  }
}
 
class Example {
  use StaticExample;
}
 
Example::doSomething();
Nach dem Login kopieren
<?php
// 定义属性
trait PropertiesTrait {
  public $x = 1;
}
 
class PropertiesExample {
  use PropertiesTrait;
}
 
$example = new PropertiesExample;
$example->x;
Nach dem Login kopieren

Empfohlenes Tutorial: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Verwendung von Trait durch PHP zur Lösung des PHP-Einzelvererbungsproblems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
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