Maison > développement back-end > tutoriel php > Exemple détaillé de PHP utilisant Trait pour résoudre le problème d'héritage unique PHP

Exemple détaillé de PHP utilisant Trait pour résoudre le problème d'héritage unique PHP

coldplay.xixi
Libérer: 2023-04-08 20:24:01
avant
2396 Les gens l'ont consulté

Exemple détaillé de PHP utilisant Trait pour résoudre le problème d'héritage unique PHP

PHP utilise Trait pour résoudre en détail le problème d'héritage unique de PHP

Cet article présente principalement l'utilisation de PHP Trait résout le problème de l'héritage unique PHP.Il analyse en détail les techniques de fonctionnement et les précautions pertinentes pour PHP utilisant Trait pour implémenter l'héritage unique PHP sous forme d'exemples. Les amis dans le besoin peuvent se référer à

Les exemples de cet article décrivent l'utilisation de Trait en PHP. Résoudre le problème d'héritage unique PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Qu'est-ce que l'héritage ?

L'héritage est en fait une relation entre deux classes qui existe dans la programmation orientée objet. C'est un moyen important de méthode de programmation orientée objet. Les programmes peuvent être organisés plus efficacement grâce à l'héritage. relation entre les classes et utiliser pleinement les classes existantes pour réaliser un développement plus complexe et plus approfondi.

Lorsqu'une classe possède toutes les données et opérations d'une autre classe, on dit qu'il existe une relation d'héritage entre les deux classes.

La classe héritée est appelée la classe parent, et la classe qui hérite de toutes les données et opérations de la classe parent est appelée une sous-classe.

Utilisez extends en PHP pour indiquer la relation d'héritage entre la sous-classe et la classe parent.

Dans la programmation orientée objet, l'utilisation de l'héritage pour organiser les classes dans le système de conception peut améliorer l'abstraction du programme, le rapprocher de la façon de penser humaine, rendre la structure du programme plus claire et réduire le codage et la maintenance. charge de travail.

L'héritage unique signifie que toute classe n'a qu'une seule classe parent et que sa structure peut être représentée par une simple structure arborescente ; l'héritage multiple signifie qu'une classe peut avoir plus d'une classe parent et ses données statiques ; les attributs et les opérations sont hérités de toutes ces classes parentes et leur structure doit être représentée dans une structure de maillage complexe.

PHP ne prend en charge que l'héritage unique, tandis que l'héritage multiple est implémenté via des interfaces ou des traits.

Exemple d'héritage unique en PHP

// 单继承:一个子类只能有一个父类
class A{
  function show() {
    echo "A";
  }
}
 
class B{
  function show() {
    echo "B";
  }
}
 
class C extends A{
 
}
 
$c = new C;
$c->show();
Copier après la connexion

Utiliser Trait pour résoudre l'héritage unique en PHP

Self À partir de PHP 5.4.0, PHP implémente une méthode de réutilisation de code appelée traits.

Trait est un mécanisme de réutilisation de code préparé pour les langages à héritage unique comme PHP. Trait est conçu pour réduire les restrictions des langages à héritage unique et permettre aux développeurs de réutiliser librement la sémantique dans des classes indépendantes. de la combinaison methodTrait et Class définissent un moyen de réduire la complexité et d'éviter les problèmes typiques liés à l'héritage multiple traditionnel et aux classes Mixin qui ne peuvent pas être instanciées par le trait lui-même

Exemple :

<?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);
Copier après la connexion

Traits multiples

Séparés par des virgules, plusieurs traits sont répertoriés dans la déclaration d'utilisation, et ils peuvent tous être insérés dans une classe.

<?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();
Copier après la connexion

Résolution des conflits

Si deux traits insèrent une méthode du même nom, une erreur fatale sera générée si le conflit n'est pas explicitement résolu.

Afin de résoudre le conflit de nom de plusieurs traits dans la même classe, vous devez utiliser l'opérateur placeof pour spécifier explicitement laquelle des méthodes en conflit utiliser.

La méthode ci-dessus permet uniquement d'exclure d'autres méthodes. L'opérateur as peut introduire un alias pour une méthode. Notez que l'opérateur as ne renomme pas la méthode et n'affecte pas ses méthodes.

Exemple :

<?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;
  }
}
Copier après la connexion

Composer des traits à partir de traits

Tout comme les classes peuvent utiliser des traits, d'autres traits peuvent également utiliser des traits. En utilisant un ou plusieurs traits lors de la définition d'un trait, vous pouvez combiner tout ou partie des membres d'autres traits.

<?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();
Copier après la connexion

Membres abstraits de Trait

Afin d'appliquer les exigences sur les classes utilisées, les traits prennent en charge l'utilisation de méthodes abstraites.

<?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;
  }
}
Copier après la connexion

Membres statiques de Trait

Les traits peuvent être définis par des membres statiques et des méthodes statiques.

<?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
Copier après la connexion
<?php
// 静态方法
trait StaticExample {
  public static function doSomething() {
    return &#39;Doing something&#39;;
  }
}
 
class Example {
  use StaticExample;
}
 
Example::doSomething();
Copier après la connexion
<?php
// 定义属性
trait PropertiesTrait {
  public $x = 1;
}
 
class PropertiesExample {
  use PropertiesTrait;
}
 
$example = new PropertiesExample;
$example->x;
Copier après la connexion

Tutoriel recommandé : "

Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal