Home  >  Article  >  Backend Development  >  Example code sharing of the Traits function introduced into the thinkPHP5.0 framework

Example code sharing of the Traits function introduced into the thinkPHP5.0 framework

黄舟
黄舟Original
2017-03-18 09:11:221564browse

This article mainly introduces the Traits function introduced by the thinkPHP5.0 framework. It analyzes the concept and function of Traits and the use of the Traits function in thinkPHP5.0 in the form of examples. Friends in need can refer to the following

The example in this article describes the introduction of Traits function in thinkPHP5.0 framework. Share it with everyone for your reference, the details are as follows:

ThinkPHP 5.0 began to use the trait function (PHP5.4+) as an extension mechanism, which can easily realize the multiple inheritance problem of 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, you must manually import the trait class library, 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 the trait class libraries built into these systems uses traits instead of traits to avoid conflicts with the system's keywords.

Class libraries introduced by trait method need to pay attention to the priority. Members inherited from the base class are overwritten 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.

The above is the detailed content of Example code sharing of the Traits function introduced into the thinkPHP5.0 framework. 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