Maison >développement back-end >tutoriel php >Un tutoriel simple sur la réutilisation du code PHP

Un tutoriel simple sur la réutilisation du code PHP

小云云
小云云original
2017-11-16 09:16:251943parcourir

Depuis PHP 5.4.0, PHP implémente une méthode de réutilisation de code appelée Trait.

Traits est un mécanisme de réutilisation de code pour les langages à héritage unique comme PHP. Trait Réduire les limitations des langages à héritage unique et donner aux développeurs la liberté de réutiliser des ensembles de méthodes dans des classes indépendantes au sein de différentes hiérarchies. Caractéristiques La sémantique de la composition des classes définit un moyen de réduire la complexité et d'éviter les problèmes typiques associés à l'héritage multiple et aux mixins traditionnels.

Utilisation simple

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello Trait&#39;;
    }
}class Base{    public function index()
    {        echo &#39;index&#39;;
    }
}class One extends Base{    use Test;
}class Two extends Base{    use Test;
}
$one = new One();
$two = new Two();echo $one->echoHello();echo $one->index();echo $two->echoHello();

Le résultat est l'index Hello Trait Hello Trait.

Les membres hérités de la classe de base seront remplacés par les membres insérés par Trait. L'ordre de priorité est que les membres de la classe actuelle remplacent les méthodes Trait et que les Traits remplacent les méthodes héritées.

<?php
trait Test{    public function echoHello()   
 {        echo &#39;Hello Trait&#39;;    }}class Base
 {    use Test;    public function echoHello()  
  {        echo &#39;Hello Base&#39;;    }}class One extends Base
  {    use Test;    public function echoHello()    
  {        echo &#39;Hello One&#39;;    }}class Two extends Base
  {    use Test;}$one = new One();$two = new Two();$base = new Base();
  echo $one->echoHello();echo $two->echoHello();echo $base->echoHello();
结果输出 Hello One Hello Trait Hello Base。
?>

L'exemple de classe 1 couvre la classe de base et le test de trait, indiquant que la priorité de la méthode de la classe actuelle est supérieure à eux.

classe Deux exemples couvrent la classe de base, Trait a une priorité supérieure à la classe de base héritée.

L'exemple de base de classe couvre Trait Test, indiquant que la priorité de la méthode de la classe actuelle est supérieure à Trait.

Plusieurs traits répertoriés dans la déclaration d'utilisation séparés par des virgules peuvent être insérés dans une classe.

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello &#39;;
    }
}trait TestTwo
{    public function echoWord()
    {        echo &#39;word !&#39;;
    }
}class One{    use Test,TestTwo;
}
$one  = new One();echo $one->echoHello();echo $one->echoWord();

Le résultat est Bonjour mot !.

Si deux Traits insèrent une méthode du même nom, une erreur fatale se produira si le conflit n'est pas résolu explicitement.

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello Test&#39;;
    }    public function echoWord()
    {        echo &#39;word Test&#39;;
    }
}trait TestTwo
{    public function echoHello()
    {        echo &#39;Hello TestTwo &#39;;
    }    public function echoWord()
    {        echo &#39;word TestTwo&#39;;
    }
}class One{    use Test, TestTwo {        Test::echoHello as echoTest;
        Test::echoWord insteadof TestTwo;
        TestTwo::echoHello insteadof Test;
    }
}
$one = new One();echo $one->echoTest();echo $one->echoWord();echo $one->echoHello();

Résultat de sortie : Bonjour Test mot Test Bonjour TestTwo.

Utiliser comme alias, c'est-à-dire Test::echoHello comme echoTest ; sortie echoHello dans Trait Test.

Utiliser l'opérateurplaceof pour exclure d'autres traits, c'est-à-dire Test::echoWord au lieu de TestTwo ; la sortie est Word Test, utilisez echoWord

dans Trait Test pour modifier les autorisations de contrôle de la méthode

<?phptrait Test
{    public function echoHello()
    {        echo &#39;Hello&#39;;
    }    public function echoWord()
    {        echo &#39;word&#39;;
    }
}trait TestTwo
{    public function echoHello()
    {        echo &#39;Hello TestTwo &#39;;
    }    public function echoWord()
    {        echo &#39;word TestTwo&#39;;
    }
}class One{    use Test {        echoHello as private;
    }
}class Two{    use Test {        echoHello as private echoTwo;
    }
}
$one = new One();
$two = new Two();echo $two->echoHello();

pour afficher le résultat Bonjour.

Utilisez comme dans la première classe pour rendre echoHello privé, alors echoHello n'est pas accessible via la première classe.

Utilisez comme dans la classe deux pour le renommer d'abord, puis définissez la nouvelle méthode de dénomination comme privée. Les méthodes du trait d'origine sont accessibles normalement.

Les attributs peuvent également être définis dans Trait comme une classe. C'est très utile !

Ce qui précède présente quelques utilisations de base des traits. Pour plus de détails, veuillez vous référer au manuel officiel. Voici quelques points à noter : Point : Trait remplacera la méthode de classe parent héritée par la classe appelante. Le trait ne peut pas être instancié en utilisant new comme Class

Un seul trait peut être composé de plusieurs traits. Dans une seule classe, plusieurs traits peuvent être utilisés. Trait prend en charge les mots de modification (modificateurs), tels que final, statique, abstrait, que nous pouvons utiliser à la place et comme opérateurs pour résoudre les conflits entre les traits.

Recommandations associées :

Explication détaillée des traits et leur application en php

Explication détaillée de l'utilisation du mécanisme de réutilisation des traits en php

Explication détaillée de l'utilisation des traits en 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!

Déclaration:
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