zoukankan      html  css  js  c++  java
  • php trait 多继承问题

    php trait 多继承问题

    简介

    php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,

    php 从5.4出了Trait这个特性

    注意事项

    • Trait类不能实例化
    • Trait类里面的方法只能使用public权限

    例:

    <?php
    
    trait A{
        public function aa(){
            return 'aaa';
        }
    }
    
    trait B {
        public function bb(){
            return 'bb';
        }
    }
    
    class User{
        public function hello(){
            return 'hello';
        }
    }
    
    class VipUser extends User{
        use A;
        use B;
        public function  hello2(){
            return 'hello2';
        }
    
        //重写
        public function aa(){
            return 'AAAAA';
        }
    }
    
    $vip = new VipUser();
    echo $vip->aa();
    echo $vip->bb();
    

    运行结果

    image-20200526212614173

    多个trait里面方法重名冲突问题

    当不同的trait中,却有着同名的方法或属性,会产生冲突,可以使用insteadof或 as进行解决,insteadof 是进行替代,而as是给它取别名

    例:

    <?php
    
    class User {
        public function hello() {
            return 'hello';
        }
    }
    
    trait B {
        public function bb() {
            return 'bb';
        }
    }
    trait A {
        public function aa() {
            return 'aaa';
        }
        public function bb() {
            return 'BBBBB';
        }
    }
    
    class VipUser extends User {
        use A,B{
            // 如果调用的方法名为bb则,我们B中的方法指向到A中,
            // 而自己本身的bb方法则修改为bbb然后指向到自己的内容
            A::bb insteadof B;
            B::bb as bbb;
        }
        public function hello2() {
            return 'hello2';
        }
    }
    
    $vip  = new VipUser();
    
    echo $vip->bb();
    echo $vip->aa();
    

    运行结果

    image-20200526220225038

  • 相关阅读:
    腾讯实习前端工程师面经-一面-腾讯看点
    Redux的createStore实现
    GNU ARM 汇编基础
    python爬虫学习04-爬取贴吧
    python学习03-使用动态ua
    Python爬虫学习02--pyinstaller
    python爬虫学习01--电子书爬取
    简单的SQL语句学习
    微信小程序的五个生命周期函数
    python学习(12)使用正则表达式
  • 原文地址:https://www.cnblogs.com/makalochen/p/12969265.html
Copyright © 2011-2022 走看看