Home  >  Article  >  Backend Development  >  Detailed explanation of the example code of traits introduced in thinkPHP5

Detailed explanation of the example code of traits introduced in thinkPHP5

伊谢尔伦
伊谢尔伦Original
2017-07-03 11:10:161953browse

ThinkPHP 5.0 began to use the trait function (PHP5.4+) as an extension mechanism to easily implement multiple inheritance issues in a class library.

Traits is a code reuse mechanism prepared for single inheritance languages ​​like PHP. Traits are designed to reduce the constraints of single-inheritance languages ​​and allow developers to freely reuse method sets in independent classes within different hierarchies. The semantics of traits and class composition define a way to reduce complexity and avoid the typical problems associated with traditional multiple inheritance and mixins.

However, since the PHP5.4 version does not support the trait's automatic loading, so if it is the PHP5.4 version, the trait class library must be imported manually, and the system provides a The helper function load_trait is used to automatically load the trait class library. For example, the trait class library can be correctly introduced like this.

namespace app\index\controller;
load_trait('controller/Jump'); // 引入traits\controller\Jump
class index
{
   use \traits\controller\Jump;
   public function index()
   {
     $this->assign('name','value');
     $this->show('index');
   }
}

If your PHP version is greater than 5.5, you can omit the load_trait function introductiontrait.

namespace app\index\controller;
class index
{
   use \traits\controller\Jump;
   public function index()
   {
   }
}

can support the introduction of multiple trait class libraries at the same time, for example:

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other;
   use \traits\controller\Jump;
   public function index()
   {
   }
}

or use

namespace app\index\controller;
load_trait('controller/Other');
load_trait('controller/Jump');
class index
{
   use \traits\controller\Other,\traits\controller\Jump;
   public function index()
   {
   }
}

The system provides some encapsulated trait class libraries, mainly used for Controller and Extensions of model classes. The root namespace of these systems' built-in trait class libraries uses traits instead of traits to avoid conflicts with the system's keywords.

Class libraries introduced by trait method need to pay attention to priority. Members inherited from the base class are overridden by members inserted by trait. The order of precedence is that members from the current class override the trait's methods, and the trait overrides the inherited methods.

Trait classes do not support defining class constants. Properties defined in a trait cannot be redefined in the current class or inherited classes.

Conflict resolution

We can introduce multiple trait class libraries into one class library. If both traits define a method with the same name, if there is no clear Resolving the conflict will produce a fatal error.

In order to resolve the naming conflict of multiple traits in the same class, you need to use the insteadof operator to explicitly specify which of the conflicting methods to use.

The above method only allows to exclude other methods. The as operator can introduce one of the conflicting methods under another name.

For more information about traits, please refer to the PHP official manual.

The above is the detailed content of Detailed explanation of the example code of traits introduced in thinkPHP5. 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