php中trait的使用(多继承) 
                                                    
                        
                    
                    
  
                    
                    php中trait的使用
为php这种单继承代码提供代码复用方案(多继承 trait类不支持实例化)
优先级顺序
子类>trait类>基类
单个trait类
<?php
class Base {
 public function sayHello() {
 echo 'Hello ';
    }
}
trait SayWorld {
 public function sayHello() {
 parent::sayHello();
 echo 'World!';
    }
}
class MyHelloWorld extends Base {
 use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello(); // hello world!
?>
多个trait类但不冲突
<?php
trait Hello {
 public function sayHello() {
 echo 'Hello ';
    }
}
trait World {
 public function sayWorld() {
 echo 'World';
    }
}
class MyHelloWorld {
 use Hello, World;
 public function sayExclamationMark() {
 echo '!';
    }
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>
多个trait但冲突
<?php
trait Hello {
    public function say() {
        echo 'Hello world ';
    }
}
trait World {
    public function say() {
        echo '你好!';
    }
}
class MyHelloWorld {
    // 写法1,用instanceof去指定冲突的方法使用哪个trait类
    use Hello, World {
        Hello::say insteadof  World; //  Hello world
    }
    // 写法2,用as方法 去给冲突的方法指定别的方法名称.
    use Hello, World {
        Hello::say as sayOne;
        World::say as sayTwo;
    }
}
$o = new MyHelloWorld();
//$o->sayOne(); // Hello world
$o->sayTwo(); // 你好!
                        
                        本作品采用《CC 协议》,转载必须注明作者和本文链接
          
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: