文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php教程>PHP之认识(二)关于Traits的用法详解

PHP之认识(二)关于Traits的用法详解

时间:2021-01-18  来源:互联网

PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。Traits的出现解决了这一问题。

1、通过在类中使用use关键字声明要组合的Trait名称,而具体某个Trait的声明使用trait关键词,Trait不能直接实例化。具体用法:

<?php

trait Person{

    public $name="person";

    public function talk(){

        echo "我是{$this->name}<br/>";

    }

}

class Teacher{

    public function speak(){

        echo "我能教书<br/>";

    }

}

class Student extends Teacher{

    use Person;

    public function study(){

        echo "我需要学习<br/>";

    }

}

$student = new Student();

$student->talk();

$student->speak();

$student->study();

?>

2、Trait、父类和本类中都存在某个同名的属性或者方法是,会保留哪一个?

<?php

trait Person{

    public $name="person";

    public function talk(){

        echo "我是{$this->name}<br/>";

    }

     public function hello() {

    echo "hello Person<br/>";

  }

}

class Teacher{

    public function talk(){

        echo "我能教书<br/>";

    }

     public function hello() {

    echo "hello Teacher<br/>";

  }

}

class Student extends Teacher{

    use Person;

    public function talk(){

        echo "我需要学习<br/>";

    }

}

$student = new Student();

$student->talk();

$student->hello();

结果输出

我需要学习

hello Person

由结果可知

//trait的方法覆盖了基类Person中的方法,所以Person中的方法hello和speak被覆盖

//当方法或属性同名时,当前类中的方法会覆盖 trait的方法,所以此处talk会覆盖trait中的talk

3、如果多个Trait中包含同名方法或者属性时,会怎样呢?答案是当组合的多个Trait包含同名属性或者方法时,需要明确声明解决冲突,否则会产生一个致命错误。使用insteadof和as操作符来解决冲突,insteadof是使用某个方法替代另一个,而as是给方法取一个别名

以上所述是PHP之认识(二)关于Traits的用法详解,希望对您的学习有所帮助。

相关阅读更多 +
最近更新
排行榜 更多 +
元梦之星最新版手游

元梦之星最新版手游

棋牌卡牌 下载
我自为道安卓版

我自为道安卓版

角色扮演 下载
一剑斩仙

一剑斩仙

角色扮演 下载