* Trait Answer
* Trait : 关键字 Trait
* 使用 use
* 我的理解 是为了解决php不能多继承的一个处理方式
* 在使用的时候 可以让两个不相关的类 产生联系
* Trait 如何使用
* 我觉得 有点类似于 thinkPHP中的function.php的作用
* 有点类似于 codeIgniter中的libraries的作用
* 但是有一定的区别
* 在公共的方法里面 都是一些处于独立较强的 比如 : md5加密 手机号码验证 发送短信 curl 等等
* 在Trait里面 可以定义一些成员属性 可以完成特定功能 也可以进行CURD
* 在使用的时候 namespace指定后 直接使用use关键字即可
* 两者的共同点
* 都是在完成指定功能 并且可以被重复调用 减少代码的冗余
*
* 注意点 :
* Trait里面不能有常量
* Trait里面的保护和私有的成员属性 外界不可以调用
* Trait里面方法可以被调用者覆盖,但属性不行,如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。
撸过的代码:
1 trait Answer{ 2 public $a = 1; 3 private $b = 2; 4 protected $c = 3; 5 6 public function begin() 7 { 8 return '这是开始'; 9 } 10 11 public function stop() 12 { 13 return '这是停止'; 14 } 15 } 16 17 18 trait Kinose{ 19 public function k_begin() 20 { 21 return '这是kinose的开始'; 22 } 23 public function k_stop() 24 { 25 return '这是kinose的停止'; 26 } 27 } 28 29 class A{ 30 //写法1: 31 use Answer,Kinose; 32 // public $a = 4; 33 //写法2: 34 // use Answer; 35 // use Kinose; 36 37 //如果重写的话 在调用的时候会直接使用A类中方法 而不是trait里面的 38 // public function begin() 39 // { 40 // return '这是A类的开始'; 41 // } 42 } 43 44 45 $a = new A(); 46 47 echo $a->begin().'<br>'; 48 echo $a->stop().'<br>'; 49 echo $a->a.'<br>'; 50 echo $a->k_begin().'<br>'; 51 echo $a->k_stop().'<br>'; 52 53 //echo $a->b.'<br>'; 54 //echo $a->c.'<br>'; 55 56 /** result 57 * 这是开始 58 * 这是停止 59 * 1 60 * 这是kinose的开始 61 * 这是kinose的停止 62 */