Home  >  Article  >  Backend Development  >  What does trait mean in php? A brief introduction to traits in php

What does trait mean in php? A brief introduction to traits in php

不言
不言Original
2018-09-14 16:46:026754browse

The content of this article is about what is trait in php? A brief introduction to traits in php has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

What does trait mean in php? A brief introduction to traits in php

#What is a trait?

Look at the introduction of PHP official website.

Since PHP 5.4.0, PHP implements a method of code reuse called traits.

Trait is a code reuse mechanism prepared for single inheritance languages ​​like 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 the typical problems associated with traditional multiple inheritance and Mixin classes.

Trait is similar to Class, but is only designed to combine 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.

Example 1

Mobile phones and cars have GPS functions. GPS is used for positioning, so the functions should be unified. Cell phones and cars have basically nothing in common except for GPS functionality, so inheritance cannot be used. As for the interface, I think that when different classes implement the interface, the implementation of the interface may be different, but the function of GPS is for positioning. So use trait instead of class and interface. This is my understanding, I don't know if it is correct.

Definition of gps.php:

<?php

trait Gps {
    public function gps() {
        echo &#39;i can gps&#39;;
    }
}

Using trait to define a GPS trait for reuse, its keyword is trait. Then reference it in car.php and mobile.php.

Definition of car.php:

class Car {
    use gps;

    public function move() {
        echo &#39;i can move&#39;;
    }
}

Definition of mobile.php:

<?php

class Mobile {
    use gps;
    public function tel() {
        echo &#39;i can tel&#39;;
    }
}

In car.php and mobile.php, use the use keyword to introduce gps trait, so that the gps() method can be called in car and mobile.

test.php Test:

<?php
require_once(&#39;gps.php&#39;);
require_once(&#39;car.php&#39;);
require_once(&#39;mobile.php&#39;);
$car = new Car();
$mobile = new Mobile();
$car->gps();
echo "\n";
$mobile->gps();

The output results are as follows:

1 i can gps
2 i can gps

Example 2

Introduced another in car A domestically produced GPS.

gpschina.php is defined as follows:

<?php

trait GpsChina {

    public function gps() {
        echo &#39;i can chinae gps&#39;;
    }
}

Introduced in car, modify the definition of car.php as follows:

<?php
class Car {
    use gps, gpschina;    
    public function move() {
        echo &#39;i can move&#39;;
    }
}

Call test.php again for testing, and then the The error is reported as follows:

1 Fatal error: Trait method gps has not been applied, because there are collisions with other trait methods on Car in Car.php on line 4

Because in the introduced traits, gps and gpschina each have a gps, and when using $car->gps() directly, it is impossible to determine which gps() method of gps is used. , still using the gps() method of gpschina, so an error was reported. In this case, we need to identify one. Modify the car.php file.

<?php

class Car {
    use gps, gpschina {
        GpsChina::gps insteadof Gps;
    }
    
    public function move() {
        echo &#39;i can move&#39;;
    }
}

In this way, the GpsChina::gps method is used to replace the Gps method, and then call test.php to check.

1 i can chinae gps
2 i can gps

In this way, the gps() method in gpschina is called after $car->gps().

Example 3

What if there is a gps() method in the Car class itself? Modify the Car class.

<?php

class Car {
    use gps, gpschina {
        GpsChina::gps insteadof Gps;
    }
    
    public function gps() {
        echo &#39;car::gps&#39;;
    }
    

    public function move() {
        echo &#39;i can move&#39;;
    }
}

Call test.php to view the results:

1 car::gps
2 i can gps

It can be seen that the gps() method of the Car class itself is called.

If in a class, the method inherited from the parent class, the use method to introduce the trait and the method of the class itself have the same name, the method of the own class will be called first. If there is no method of the own class, the use method to introduce the trait will be called. method, if the first two are not available, then the method inherited from the parent class is called.

Related recommendations:

What is the meaning of trait in php?

What is Trait? Sharing the declaration and usage skills of Trait in php

The above is the detailed content of What does trait mean in php? A brief introduction to traits in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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