php_Trait

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


猜你喜欢

转载自www.cnblogs.com/kinsFeng/p/9212068.html
今日推荐