PHP 新特性 -Trait

在之前版本的PHP当中,当我们要使用继承的时候通常都是 extends ,虽然能解决继承的问题,但是始终是单继承。

下面我们来看看新特性- Trait 带来的新思路。

 

如何使用

<?php
trait A
{
    public $a='a';

    private $aa='aa';

    public function getA()
    {
        echo 'function-a'.PHP_EOL;
    }
}

trait B
{
    public function pr()
    {
        echo 'print!';
    }
}

class test 
{
    use A,B;

    public function test_trait()
    {
        echo $this->a.PHP_EOL;
    }
}


$test=new test();
$test->test_trait();

结果是打印  a

如何理解这个特性

个人理解为复制,可以把上文中的A和B 理解为待继承的类,使用use 等同于将被继承的对象内容全部复制到继承处,可以用来实现多继承的特性。

下面多测试一些情况

·  具备相同的属性值    :程序报错。

·  具备相同的方法       :程序报错。

·  当extends继承包含相同方法的时候 :      优先级:自身方法>trait的方法>继承的方法

当使用trait 类被继承是否具备trait的内容

<?php
trait A
{
    public $a='a';

    private $aa='aa';

    public function pr1()
    {
        echo 'function-a'.PHP_EOL;
    }
}

trait B
{
    public function pr()
    {
        echo 'print!';
    }
}

class test2 
{
}

class test  extends test2
{
    use A,B;

    public function test_trait()
    {
        echo $this->a.PHP_EOL;
    }
}

class te extends test
{
    public function say()
    {

    }
}

$test=new te();
$test->a;

以上代码 打印出空白。可见继承含trait 的类 并不具备trait的内容

转载于:https://my.oschina.net/u/4173863/blog/3082243

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值