The traits in PHP 5.4 are newly introduced features, and I really don’t know how to translate them accurately into Chinese. Its actual purpose is to use multiple inheritance in some situations, but PHP does not have multiple inheritance, so such a thing was invented.
Traits can be understood as a set of methods that can be called by different classes, but traits are not classes! Cannot be instantiated. Let’s take an example to look at the syntax first:
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就可以通过use myTraits,调用Traits中的方法了,比如: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 (); >
Next, let’s explore why traits are used. For example, there are two classes, business and Individual. They both have address attributes. The traditional approach is to Abstract a parent class that both classes have common characteristics, such as client, and set the access attributes address, business and individual in the client class to inherit them respectively, as shown in the following code:
// Class Client class Client { private $address; public getAddress() { return $this->address; } public setAddress($address) { $this->address = $address; } } class Business extends Client{ //这里可以使用address属性 } // Class Individual class Individual extends Client{ //这里可以使用address属性 }
But what if there is another class called order that needs to access the same address attribute? The order class cannot inherit the client class because this does not comply with the principles of OOP. Traits come in handy at this time. You can define a trait to define these public properties.
// Trait Address trait Address{ private $address; public getAddress() { eturn $this->address; } public setAddress($address) { $this->address = $address; } } // Class Business class Business{ use Address; // 这里可以使用address属性 } // Class Individual class Individual{ use Address; //这里可以使用address属性 } // Class Order class Order{ use Address; //这里可以使用address属性 }
This is much more convenient!