Maison  >  Article  >  développement back-end  >  Une analyse approfondie des caractéristiques PHP

Une analyse approfondie des caractéristiques PHP

王林
王林avant
2019-08-20 16:59:242944parcourir

Depuis PHP5.4.0, PHP a implémenté une méthode de réutilisation de code appelée trait.

Comme nous le savons tous, PHP a un héritage unique et le trait est un mécanisme de réutilisation de code préparé pour les langages à héritage unique comme PHP. Les traits sont conçus pour réduire les limitations des langages à héritage unique et permettre aux développeurs de réutiliser librement des méthodes dans des classes indépendantes au sein de différentes hiérarchies. La sémantique des traits et de la composition des classes définit un moyen de réduire la complexité et d'éviter les problèmes traditionnels d'héritage multiple.

trait est similaire à class, mais ne combine les fonctionnalités que de manière fine et cohérente. Ne peut pas être instancié via le trait lui-même. Il ajoute une combinaison de fonctionnalités horizontales à l'héritage traditionnel ; c'est-à-dire qu'il n'est pas nécessaire d'hériter entre plusieurs classes dans une application.

Tutoriel vidéo PHP recommandé : https://www.php.cn/course/list/29/type/2.html

1. Exemple

Nous donnons d'abord un exemple pour introduire le trait, qui est similaire à la définition de classe, mais utilise le mot-clé trait definition. Utilisez des combinaisons d'utilisation dans les cours.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
    public function t2(){
        return &#39;t2&#39;;
    }
}
class Demo{
    use T;
    public function test(){
        return &#39;test&#39;;
    }多个
}
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

Résultat de sortie :

t1

test

2. Résolution de conflits de traits multiples

Si plusieurs traits sont utilisés, mais que les noms de méthodes sont les mêmes, un conflit se produira. Vous devez spécifier manuellement quelle méthode de trait utiliser, à l'aide du mot-clé insteadof.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();

Résultat de sortie :

t1

test

En cas de conflit, vous pouvez également utiliser use pour définir des alias de méthode pour résoudre le conflit. L'exemple est le suivant :

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
        T2::t1 as new_t1;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->new_t1(),&#39;</br>&#39;;
echo $demo->test();

Résultats de sortie :

t1

t3

test

3.

Vous pouvez également utiliser le mot-clé use pour modifier les autorisations d'accès des méthodes.

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
class Demo{
    use T{
        t2 as protected;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->t2(),&#39;</br>&#39;;
echo $demo->test();

Résultat de sortie :

Une analyse approfondie des caractéristiques PHP

Les connaissances ci-dessus présentent certaines fonctionnalités couramment utilisées. Pour plus de détails, veuillez vous référer au manuel officiel :

. https ://www.php.net/manual/zh/lingual.oop5.traits.php

Pour plus de questions liées à PHP, vous pouvez visiter le site Web PHP chinois : https://www.php.cn/

Merci !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer