* 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 */