Home >Backend Development >PHP Tutorial >Detailed explanation of using traits in PHP
Traits in PHP 5.4 is a newly introduced feature. I really don’t know how to translate it accurately in 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 we use traits. For example, there are two classes, business and Individual, both of which 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 follows:
// 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 if There is a class called order that needs to access the same address attribute, so what should I do? 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属性 }