php traits 介绍

php5.4新特性 traits(不知道中文翻译叫什么)

traits 作用: 代码复用,变相实现多重继承,或者叫类的代码片段

声明:

trait trait_name {
    //method
    //attribute 
    //跟class类似   
}

 调用:

trait trait_name2 {//组合多个trait
    use trait_name1;
abstract public function getWorld();//可以声明抽象方法 }
class class_name{ use trait_name1,trait_name2;
   public function getWorld(){}//需要实现抽象方法 }

注意:

1. trait 不可实例化,trait 只是代码片段,当有继承时,use trait 将覆盖父类方法

2. trait 可以声明抽象方法,静态方法等

3. 使用 trait 之间不可有相同的方法或属性声明,出现相同使用时需处理,如下:

<?php 
trait A {
    public function smallTalk() {
        echo 'a';
    }
    public function bigTalk() {
        echo 'A';
    }
}

trait B {
    public function smallTalk() {
        echo 'b';
    }
    public function bigTalk() {
        echo 'B';
    }
}
trait C {
    public function smallTalk() {
        echo 'c';
    }
    public function bigTalk() {
        echo 'C';
    }
}
class Talker {
    use A, B,C {
        B::smallTalk insteadof A,C;//必须处理冲突的名,指定默认使用
        B::bigTalk insteadof A,C;//必须处理冲突的名,指定默认使用
        A::bigTalk as AbigTalk;//如果需使用其他类的方法,对方法重命名
        C::bigTalk as CbigTalk;//如果需使用其他类的方法,对方法重命名
        C::smallTalk as protected CsmallTalk;//如果需使用其他类的方法,对方法重命名,且修改方法可见性
        A::smallTalk as protected;//如果需使用其他类的方法,修改方法可见性
    }
}
$a=new Talker();
$a->AbigTalk();

4.本类声明的方法将重写父类的方法或trait的方法

5. 不能实现接口(implements),继承(entends)等.(继承可以用类似的use 来实现)

 

官方介绍:http://php.net/manual/zh/language.oop5.traits.php

posted @ 2013-03-14 12:05  liushan  阅读(584)  评论(0编辑  收藏  举报