Home  >  Article  >  Backend Development  >  Detailed explanation of how to use Trait to solve single inheritance problem in PHP

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

青灯夜游
青灯夜游forward
2022-03-01 10:56:554145browse

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.

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

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 introduce Trait

Trait introduction

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.

Single inheritance structure

I mentioned at the beginning that PHP 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?

Sample source code

I checked the source code of Laravel, taking the built-in LoginController as an example, in which the login authentication is implemented through Trait:

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

Create Trait

Creating Trait is very simple, it is similar to creating a class, except that the keyword used is trait instead of class, take the above AuthenticatesUsers as an example:

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

What we define through the trait 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 as AuthenticatesUsers is like this:

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

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.

Using Trait

The method of using Trait is also very simple. The screenshot example above has shown it very clearly: use useKeywords.

Introduction location

Note: Namespace and Trait are both introduced using the use keyword. The difference lies in the import location, Namespace is imported outside the class definition, while Trait is imported inside the class definition body.

Detailed explanation of how to use Trait to solve single inheritance problem in PHP

Compilation issues

If Trait and the class that references Trait have the same properties and methods, we need to use them when calling externally instansofThe 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!

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