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

An in-depth analysis of PHP traits

王林
Release: 2023-02-23 10:18:02
forward
2988 people have browsed it

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();
Copy after login

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();
Copy after login

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();
Copy after login

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();
Copy after login

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!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template