Home >Backend Development >PHP Problem >An in-depth analysis of PHP traits

An in-depth analysis of PHP traits

王林
王林forward
2019-08-20 16:59:242987browse

Since PHP5.4.0, PHP has implemented a code reuse method called trait.

As we all know, PHP has single inheritance, and trait is a code reuse mechanism prepared for single inheritance languages ​​similar to PHP. Traits are designed to reduce the limitations of single-inheritance languages ​​and allow developers to freely reuse methods in independent classes within different hierarchies. The semantics of trait and class composition define a way to reduce complexity and avoid traditional multiple inheritance problems.

trait is similar to class, but only combines functionality in a fine-grained and consistent way. Cannot be instantiated through the trait itself. It adds a combination of horizontal features to traditional inheritance; that is, there is no need for inheritance between several classes in an application.

Recommended PHP video tutorial: https://www.php.cn/course/list/29/type/2.html

1. Simple Example

First we give an example to introduce trait, which is similar to class definition, but uses the keyword trait definition. Use use combinations in classes.

<?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();

Output result:

t1

test

2. Multiple trait conflict resolution

If multiple traits are used, but the method names are the same, there will be a conflict. You must manually specify which trait method to use, and use the insteadof keyword to achieve this.

<?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();

Output result:

t1

test

In the event of a conflict, you can also use use to define method aliases to resolve the conflict. The example is as follows:

<?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();

Output result:

t1

#t3

test

3. Change access permissions

You can also use the use keyword to change the access permissions of the method.

<?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();

Output result:

An in-depth analysis of PHP traits

The above knowledge introduces some commonly used features. For details, please refer to the official manual:

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

For more PHP related questions, please visit the PHP Chinese website: https:// www.php.cn/

Thank you!

The above is the detailed content of An in-depth analysis of PHP traits. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete