博客列表 >trait特性

trait特性

Pengsir
Pengsir原创
2018年01月20日 15:21:152296浏览
  1. trait突破了单继承的限制

  2. trait类的优先级是高于同名父类方法 子类 >trait >父类

  3. 多个trait类中有同名的方法,Demo1::hello insteadof Demo2;代替Demo2
    3.1想输出trait的Demo2中hello()方法 给hello改个名 Bhello;

1.trait突破了单继承的限制示例:
<?php
/**
 * trait实现了代码的复用
 * trait是类不是类,不能实例化
 * 1.trait突破了单继承的限制示例
 */
trait Demo1
{
    public function hello1(){
        return __METHOD__;
    }
}
trait Demo2
{
    public function hello2(){
        return __METHOD__;
    }
}
class Demo
{
//    注:use在这里不是导入命名空间,而是引入Demo1,Demo2这两个类到Demo类,这样可以突破了单继承
    use Demo1,Demo2;
    public function hello(){
        return __METHOD__;
    }
    public function test1(){
        return $this->hello1();
    }
    public function test2(){
        return $this->hello2();
    }
}
$obj = new Demo;
echo $obj->hello();
echo '<hr>';
echo $obj->test1();
echo '<hr>';
echo $obj->test2();
<?php
/**
 * 2.trait类的优先级是高于同名父类方法 子类 >trait >父类
 */
trait Demo1
{
    public function hello(){
        return __METHOD__;
    }
}
trait Demo2
{
    public function hello2(){
        return __METHOD__;
    }
}
class Test
{
    public function hello(){
        return __METHOD__;
    }
}
class Demo extends Test
{
    use Demo1,Demo2;
//    public function hello(){
//        return __METHOD__;
//    }
    public function test1(){
        return $this->hello1();
    }
    public function test2(){
        return $this->hello2();
    }
}
$obj = new Demo;
echo $obj->hello();
<?php
/**
 *3.trait优先级问题:当多个trait类中有同名的方法,怎么办?
 * 多个trait类中有同名的方法,Demo1::hello insteadof Demo2;代替Demo2
 *3.1想输出trait的Demo2中hello()方法 给hello改个名 Bhello;
 */
trait Demo1
{
    public function hello(){
        return __METHOD__;
    }

}
trait Demo2
{
    public function hello(){
        return __METHOD__;
    }

}
class Test
{
    public function hello(){
        return __METHOD__;
    }
}
class Demo extends Test
{
    use Demo1,Demo2{
        //多个trait类中有同名的方法,Demo1::hello insteadof Demo2;代替Demo2
        //想输出trait的Demo2中hello()方法 给hello改个名 Bhello;
        Demo1::hello insteadof Demo2;
        Demo2::hello as Bhello;
    }

//    public function hello(){
//        //返回一个类的静态方法
//        return __METHOD__;
//    }
    public function test1(){
        //返回一个类的静态方法
        return $this->hello();
    }
    public function test2(){
        //返回一个类的静态方法
        return $this->Bhello();
    }
}
$obj = new Demo;
echo $obj->hello();
echo '<hr>';
echo $obj->test1();
echo '<hr>';
echo $obj->test2();


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议