Blogger Information
Blog 31
fans 0
comment 0
visits 30281
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Trait组合的同名方法的命名冲突的解决方案及trait与接口,抽象类联合编程
emy
Original
1305 people have browsed it

一、Trait组合的同名方法的命名冲突的解决方案

1-当trait同名的时候,有两种方法来解决:
1)把一个同名的替换,语法是insteadOf;
举例说明:

<?php
    trait tgrade1
    {
        public function hy()
        {
            echo '注册会员享受折扣';
        }
    }
    trait tgrade2
    {
        public function hy()
        {
            echo '非会员不打折';
        }
    }
    class Emy 
    {
        use tgrade1,tgrade2
        {
            tgrade1::hy insteadof tgrade2;
            tgrade2::hy as hyen;
        }
    }
    $emy = new Emy;
    echo $emy->hy();

运行效果:

QQ截图20200509071323.jpg

2)用别名as,特别注意的是,as 还可以修改trait成员的访问控制。

举例说明:

<?php
   
    trait tgrade1
    {
        public function hy()
        {
            echo '注册会员享受折扣';
        }
    }
    trait tgrade2
    {
        public function hy()
        {
            echo '非会员不打折';
        }
    }
    class Emy
    {
        //修改访问权限
        // use tgrade1 {eat as protected;}
        //修改别名
        use tgrade1 {
            hy as hy1;
        }
    }
    $emy = new Emy;
    echo $emy->hy();
    echo '<hr>';
    echo $emy->hy1();

运行效果:

QQ截图20200509070744.jpg

二、trait 与 interface 接口进行组合

<?php
    //trait :trait和interface接口进行组合
    if (!interface_exists ('iTime')){
        interface iTime
        {
            public static function index();
        }
    }
    if (!trait_exists('tTime')){
        trait tTime
        {
            public static function index()
            {
                return '当前时间:'.date("H:i:s");
            }
        }
    }
    //实现这个类
    if (!class_exists('yuyue')){
        class yuyue implements iTime
        {
           use tTime;
         }
        }
    echo yuyue::index();

运行效果:

微信截图_20200509164559.png

三、trait 实现接口方法的优缺点是什么?

首先我们要知道什么是 Trait ?说简单点,就是能把重复的方法拆分到一个文件,通过 use 引入以达到代码复用的目的。主要的优点在于随意组合,耦合性低,可读性高。还有以下两个优点:

1-减少接口实现代码冗余: 假设不使用trait实现接口方法, 多个类扩展某个接口, 必须在这些类内部实现该接口的方法, 这会造成实现接口的代码冗余.

2-借用trait实现多继承: 假设两个(或多个)接口已经有对应的实现类, PHP的单继承限制, 没有办法同时继承这两个(或多个)实现类. 但使用trait实现接口, 就能实现多继承。

缺少项目实战经验,所以暂不是很清楚trait的缺点如何?

四、总结:对trait有了一个初步的认识,需在后面的实操中加强记忆和如何运用灵活。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:trait是对象组合的重要工具, 可以一定程度上摆脱对依赖注入的依赖, 让代码更加的简洁
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