Blogger Information
Blog 42
fans 3
comment 2
visits 32149
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP三十二天作业-使用trait实现代码复用-2018-05-11
HeartofSunny的博客
Original
774 people have browsed it

实例

<?php
//trait实现代码复用

//声明一个trait类
trait Student{
    public $name = '爱丽丝';
    public $age = 5;

    public function study(){
        echo $this->name.'今年'.$this->age.'岁';
    }
}

//声明一个父类
class Sprot{
    //导入trait
    use Student;
    public function swim(){
        echo $this->name.'在游泳,今年'.$this->age.'岁';
    }
}

//声明一个子类继承Sport
class Hobby extends Sprot{
    //导入trait
    use Student;
    protected $hobby = '唱歌';

    public function hob(){
        echo $this->name.'的爱好是'.$this->hobby;
    }
}

$stuhobby = new Hobby();
//调用Student的方法
$stuhobby->study();
echo '<br>';
//调用父类的方法
$stuhobby->swim();
echo '<br>';
//调用自己的方法
$stuhobby->hob();

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

        自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

        Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

        Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

        在我理解说白了就是在继承类链中隔离了子类继承父类的某些特性(就是子类“要用父类的特性的时候”,如果trait有,就优先调用trait的方法、属性等)。

        从本质上说,trait和include文件的概念差不多

        trait可以更加方便的实现代码复用,因为我们用继承关系实现的无法在父类中访问子类的private属性与方法,而trait就和把代码直接写在对象里效果一样。

        使用trait时候应该坚决避免命名冲突,尤其是同时使用多个trait时。

        如果产生了命名冲突,如果两者的可见性、初始值、static与否完全相同,则trait中的会覆盖掉对象中的,并抛出E_STRICT错误,否则会抛出E_COMPILE_ERROR错误,终止编译。


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post