• php中trait的使用


    来源:https://blog.csdn.net/lemony521/article/details/78322652

    参考:https://www.jianshu.com/p/fc053b2d7fd1

    php中trait的使用
    1、php中的trait是啥?

    看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

    2、PHP版本要求:
    php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。

    3、trait的使用场景:
    试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理?
    通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。

    这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。

    由此,trait的作用就出来了,trait 可以在多个类中使用。

    4、trait如何使用:
    引用PHP手册中的例子:

    例子一

    <?php
    trait ezcReflectionReturnInfo {
        function getReturnType() { /*1*/ }
        function getReturnDescription() { /*2*/ }
    }
    
    class ezcReflectionMethod extends ReflectionMethod {
        use ezcReflectionReturnInfo;
        /* ... */
    }
    
    class ezcReflectionFunction extends ReflectionFunction {
        use ezcReflectionReturnInfo;
        /* ... */
    }
    ?>

    1、先声明一个trait;
    2、在类中使用use将该trait引入。
    是不是非常简单(手动逃)?需要注意的是trait的优先级。

    5、trait的优先级

    (敲黑板)从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

    优先级:自身方法>trait的方法>继承的方法(就是这样子的。)

    看例子

    <?php
    trait HelloWorld {
        public function sayHello() {
            echo 'Hello World!';
        }
    }
    
    class TheWorldIsNotEnough {
        use HelloWorld;
        public function sayHello() {
            echo 'Hello Universe!';
        }
    }
    
    $o = new TheWorldIsNotEnough();
    $o->sayHello();//输出是 Hello Universe!
    ?>

    还有一点需要注意的是:多个trait的使用。

    <?php
    trait Hello {
    public function sayHello() {
    echo 'Hello ';
    }
    }
    
    trait World {
    public function sayWorld() {
    echo 'World';
    }
    }
    
    class MyHelloWorld {
    use Hello, World;
    public function sayExclamationMark() {
    echo '!';
    }
    }
    
    $o = new MyHelloWorld();
    $o->sayHello();
    $o->sayWorld();
    $o->sayExclamationMark();
    ?>

    总结:Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

    附:以上是trait的基本使用,其还有几个比较高级的使用注意点,详细的使用方法可以参见PHP手册,这里给出链接:PHP手册中trait的使用!以上内容中的例子都是来自于该手册。

    参考:
    1. http://php.net/manual/zh/language.oop5.traits.php
    2. http://laravelacademy.org/post/4281.html
    3. http://www.jianshu.com/p/47f0cdbe9b2c

  • 相关阅读:
    React项目搭建与部署
    桌面应用之electron开发与转换
    React Native之支付集成(微信 支付宝)(ios android)
    WEB通知和React Native之即时通讯(iOS Android)
    React Native之配置URL Scheme(iOS Android)
    Mybatis操作oracle数据库的一些坑
    java -jar和hadoop jar的区别
    springBoot启动的时候动态选择装载某些bean
    Java常用正则表达式
    java获取当前运行的方法名称
  • 原文地址:https://www.cnblogs.com/laijinquan/p/11526316.html
Copyright © 2020-2023  润新知