Home>Article>Backend Development> Detailed explanation of how to use Trait to solve single inheritance problem in PHP
How to break the PHP single inheritance curse? The following article will introduce to you how to use Trait to solve the single inheritance problem in PHP. I hope it will be helpful to you.
We all know that PHP is a single inheritance language, but sometimes our two classes that have nothing to do with the business may have similar behaviors. How can we elegantly What about DRY (Don't Repeat Yourself)?
The answer is to introduceTrait
Trait is a new concept introduced in PHP 5.4, which looks like a class Also like an interface. [Recommended learning: "PHP Video Tutorial"]
In fact, it is neither. Trait can be regarded as a partial implementation of the class and can be mixed into one or more existing PHP classes.
Trait is a code reuse technology that provides a flexible code reuse mechanism for PHP's single inheritance restriction.
Trait function
Indicates what the class can do;
Provides modular implementation.
I mentioned at the beginning thatPHP is a single inheritance language
, our usual habit is:
First write a general base class to implement basic functions, encapsulate general logic, and then extend this base class;
Then create more specific subclasses Class, the implementation is inherited directly from the parent class.
This is called a single inheritance hierarchy, and many programming languages use this pattern.
This typical inheritance model works well most of the time, but what should you do if you want two unrelated PHP classes to behave similarly?
I checked the source code of Laravel, taking the built-inLoginController
as an example, in which the login authentication is implemented through Trait:
Creating Trait is very simple, it is similar to creating a class, except that the keyword used istrait
instead ofclass
, take the aboveAuthenticatesUsers
as an example:
What we define through thetrait
declaration is a Trait, and then we can This Trait defines the properties and methods to be used like a class.
In addition, Traits support nesting and combination, that is, one or more Traits (multiple are separated by,) are combined into one Trait, such asAuthenticatesUsers
is like this:
Note: Trait also supports defining abstract methods and static methods, where abstract methods must be implemented in the class that uses it.
Priority of calling methods:
Calling class>Trait>parent class (if any), the method can Overrides, but not attributes.
Note: If a property is defined in Trait, an error will be reported if this property is also defined in the calling class.
The method of using Trait is also very simple. The screenshot example above has shown it very clearly: useuse
Keywords.
Note: Namespace and Trait are both introduced using theuse
keyword. The difference lies in the import location,Namespace is imported outside the class definition, while Trait is importedinside the class definition body.
If Trait and the class that references Trait have the same properties and methods, we need to use them when calling externallyinstansof
The keyword indicates whether the method is a class or a Trait.
Because the PHP interpreter will copy Trait into the definition body of the class during compilation, but will not handle the incompatibility issues introduced by this operation, so we need to solve the compatibility issues.
For more programming-related knowledge, please visit:Programming Teaching! !
The above is the detailed content of Detailed explanation of how to use Trait to solve single inheritance problem in PHP. For more information, please follow other related articles on the PHP Chinese website!