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

  • 相关阅读:
    [转载]Oracle中TO_DATE()函数用法
    validationEngine
    批处理执行sql语句 osql
    asp.net导出excel
    Oracle nls_sort和nlssort 排序功能介绍
    js中2个等号与3个等号的区别
    【36】第零章 起航
    那些年,我还在学习Ajax
    那些年,我还在学习java
    那些年,我还在学习jquery
  • 原文地址:https://www.cnblogs.com/makalochen/p/12969265.html
Copyright © 2011-2022 走看看