PHP utilise Trait pour résoudre en détail le problème d'héritage unique de PHP
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 :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 à
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();
Utiliser Trait pour résoudre l'héritage unique en PHP
<?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);
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 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } } $o = new MyHelloWorld(); $o->sayHello(); $o->sayWorld(); $o->sayExclamationMark();
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 'a'; } public function bigTalk() { echo 'A'; } } trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } 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; } }
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 'Hello '; } } trait World { public function sayWorld() { echo 'World!'; } } trait HelloWorld { use Hello, World; } class MyHelloWorld { use HelloWorld; } $o = new MyHelloWorld(); $o->sayHello(); $o->sayWorld();
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 'Hello'.$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; } }
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
<?php // 静态方法 trait StaticExample { public static function doSomething() { return 'Doing something'; } } class Example { use StaticExample; } Example::doSomething();
<?php // 定义属性 trait PropertiesTrait { public $x = 1; } class PropertiesExample { use PropertiesTrait; } $example = new PropertiesExample; $example->x;
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!