• PHP实现多继承


    题问php是否支持多继承?

    答案:不可以,只支持单继承。

    如何实现多继承呢?

    答案:可以使用 interfacetrait 实现 。

    interface这里我们就不做过多的说明了,它的原理就是一个类可以实现多个接口。下面这段代码就能够说明。

    interface test1{
        public function connect();
    }
    
    interface test2{
        public function contact();
    }
    
    // 类可以同时实现多个接口
    class myCode implements test1,test2{
        public function connect(){
        echo "test1!";
        }
        public function contact(){
        echo "test2!":
        }
    }


    下面我们重点讨论一下trait实现多继承(其实也不叫多继承,应该叫类似多继承的功能)
    那什么是trait呢?
    答:看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
    那么怎么实现trait呢?看下面代码:

      //基本类
      class basicTest{
        public function test(){
          echo "hello,world ";
        }
      }
      //traitOne
      trait traitOne{
        public function test(){
          echo "this is trait one";
        }
        public function testOne(){
          echo "one<br />";
        }
      }
      //traitTwo
      trait traitTwo{
        // public function test(){
          // echo "this is trait two!";
        // }
        public function testTwo(){
          echo "Two<br />";
        }
       }
      //继承基本类,并use trait
      class myCode extends basicTest{
        use traitOne,traitTwo;
        public function test(){
          echo "hehaha!!<br />";
        }
      }

      $obj = new myCode();
      $obj->testTwo();

      注意:

    优先级:自身方法>trait的方法>继承的方法(就是这样子的。)
    如果我们打开上述代码中的注释,会报错,因为两个trait中的方法重名了。解决办法及trait详情,可以参考以下网站:
    https://php.net/manual/zh/language.oop5.traits.php



  • 相关阅读:
    C++------------------>深浅拷贝的问题
    超越 EfficientNet与MobileNetV3,NeurIPS 2020 微软NAS方向最新研究
    数学之美
    mobilenetV2--->特点
    安装R语言扩展包vegan
    每日积累新知识
    安装生物信息学软件-R
    安装生物信息学软件-MetaPhlAn2
    概率统计&假设检验-1
    Population-based metagenomics analysis reveals markers for gut microbiome composition and diversity
  • 原文地址:https://www.cnblogs.com/573734817pc/p/10996375.html
Copyright © 2020-2023  润新知