Traits能够理解为一组能被不一样的类都能调用到的方法集合,但Traits不是类!不能被实例化。先来例子看下语法: php
<?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //而后是调用这个traits,语法为: class myClass{ use myTrait; } //这样就能够经过use myTraits,调用Traits中的方法了,好比: $obj = new myClass(); $obj-> traitMethod1 (); $obj-> traitMethod2 (); ?>
// 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属性 }
但假如又有一个叫order类的,须要访问一样的地址属性,那怎么办呢?order类是没办法继承client类的,由于这个不符合OOP的原则。这个时候traits就派上用场了,能够定义一个traits,用来定义这些公共属性。 this
// 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属性 }