返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php是多继承还是单继承
  • 141
分享到

php是多继承还是单继承

php单继承多继承 2016-11-13 18:11:02 141人浏览
摘要

php是单继承。php是不支持多继承的,但是php可以通过使用interface或者trait实现多继承,如【interface test1 {public function connect();}interface test2 ...】。

本文操作环境:windows10系统、PHP 7、thinkpad t480电脑。

php是单继承还是多继承?可能你也被这个问题困惑很久了吧。首先,PHP是单继承,他是不支持多继承的。面向对象的特点是封装、继承、多态。这里的继承是指类与类之间的继承关系,可以使用关键字extends实现,这里只可以继承一个类。

那么,php是否可以实现多继承呢?答案是可以的。

php可以用两种方式实现多继承。一个是使用interface实现。还有一个就是使用trait实现。

第一种:关于使用interface实现,它的原理就是一个类可以实现多个接口,我们可以定义多个接口类,如下:

interface test1 {
	public function connect();
}
interface test2 {
	public function contact();
}

一个类实现多个接口:

class MyClass implements test1,test2 {
	public function connect() {
		echo "test1";
	}
	public function contact() {
		echo "test2";
	}
}

第二种:使用trait实现。其实trait并不算是多继承,应该叫做类似多继承的功能。

什么是trait呢?

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

//基本类
  class basicTest{
    public function test(){
      echo "hello,world\n";
    }
  }

  //traitOne
  trait traitOne{
    public function test(){
      echo "this is trait one";
    }
    public function testOne(){
      echo "one";
    }
  }

  //traitTwo
  trait traitTwo{
    // public function test(){
      // echo "this is trait two!";
    // }

    public function testTwo(){
      echo "Two";
    }
  }

  //继承基本类,并use trait
  class myCode extends basicTest{
    use traitOne,traitTwo;
    public function test(){
      echo "hehaha!!";
    }
  }

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

注意:

优先级:自身方法>trait的方法>继承的方法(就是这样子的。)
如果我们打开上述代码中的注释,会报错,因为两个trait中的方法重名了。

如何解决trait中方法重名的情况?

//使用demo1和demo2的方法,但并不是导入命名空间
//demo1和demo2种都有hello方法
    use Demo1,Demo2{
        //将Demo1的hello方法替换Demo2的hello方法
        Demo1::hello insteadof Demo2;
        //给Demo2的hello方法起别名
        Demo2::hello as Demo2Hello;
    }
//下方调用的时候
return $this->hello(); // 使用demo1的方法
return $this->Demo2Hello();  //使用demo2的方法

--结束END--

本文标题: php是多继承还是单继承

本文链接: https://www.lsjlt.com/news/328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 多继承 , 组合 , 菱形继承 , 接口
    一, 复习属性的的正确存放位置:类中应该存储所有对象公共的内容对象中存储都是每个对象独有的(都不同)初始化函数:给对象的属性赋初值 , 可以保证只要对象被创建就一定有相应的属性节省了重复代码绑定方法: ...
    943
    2023-03-22
    组合 菱形 接口
  • JavaScript继承与多继承实例讲解
    这篇文章主要介绍“JavaScript继承与多继承实例讲解”,在日常操作中,相信很多人在JavaScript继承与多继承实例讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript继承与多继承实 ...
    195
    2023-03-22
    javascript
  • 告诉你如何破解PHP单继承魔咒
    这篇文章主要给大家介绍了关于如何破解PHP单继承魔咒的相关资料,Trait 是为类似 php 的单继承语言而准备的一种代码复用机制,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下 ...
    408
    2023-03-22
    php单继承和多继承 php单继承 PHP继承
  • python中的多继承
    python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。class P1 #(object):    def foo(s ...
    753
    2023-03-22
    python
  • 详解C++中单继承与多继承的使用
    C++的继承机制相对其他语言是比较复杂的一种,不同于java只支持单继承,C++不仅支持单继承,也支持多继承。本文将详细讲解C++中单继承与多继承的使用,需要的可以参考一下 ...
    157
    2023-03-22
    C++ 单继承 多继承 C++ 单继承 C++ 多继承 C++ 继承
  • 浅谈Java为什么只能单继承
    本文主要介绍了Java为什么只能单继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 ...
    812
    2023-03-22
    Java 单继承
  • day24 03 多继承
    day24 03 多继承 正常的代码中  单继承==减少了代码的重复继承表达的是一种 子类是父类的关系 1、简单的多继承关系 A,B,C,D四个类,其中D类继承A,B,C三个父类,因此也叫多继承,子类方法调用的时候先找自己里面的,没有再根据 ...
    892
    2023-03-22
  • C++ 多继承详情介绍
    这篇文章主要介绍了C++ 多继承详情,C++支持多继承,即允许一个类同时继承多个类。只有C++等少数语言支持多继承,下面我们就来看看具体的多继承介绍吧,需要的朋友可以参考一下 ...
    457
    2023-03-22
    C++ 多继承 多继承
  • python记录day_20 多继承
    多继承继承: x是一种y的时候.可以使用继承关系。是"is a"的关系在python中,支持多继承,一个类可以拥有多个父类。但是多继承中, 存在着这样一个问题,当两个父类中出现了重名方法的时候该怎么办呢? 这时就涉及到如何查找父类方法的问题 ...
    186
    2023-03-22
    python
  • Java中的接口多继承机制
    大家好,本篇文章主要讲的是Java中的接口多继承机制,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下 ...
    594
    2023-03-22
    Java中的接口多继承机制 Java接口继承
  • php是视频还是图片
    php不是视频也不是图片,php是一种创建动态交互性站点的强有力的服务器端脚本语言;PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己。 ...
    438
    2023-03-22
    php
  • 浅谈Python类的单继承相关知识
    本文给大家介绍面向对象三要素之一继承Inheritance的相关知识,通过示例代码给大家介绍了继承、猫类、狗类不用写代码,直接继承了父类的属性和方法,具体实现代码跟随小编一起看看吧 ...
    554
    2023-03-22
    Python类的单继承 python类 python继承
  • java什么是类的继承
    Java 中类的继承是通过扩展其他类而形成新类来实现的,原来的类称为父类(super class)或基类,新类称为原来类的子类或派生类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法,使得父类的基本特征可被所有子类的对象共享。推荐:java视频教 ...
    413
    2023-03-22
    java 继承
  • javascript是如何实现继承的
    本篇内容介绍了“javascript是如何实现继承的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javasc ...
    443
    2023-03-22
    javascript
  • python 继承与多重继承
    当然,如果不支持python继承,语言特性就不值得称为“类”。派生类定义的语法如下所示:statement-1>...statement-N>名称 BaseClassName 必须定义于包含派生类 ...
    654
    2023-03-22
    python
  • php中类继承与接口继承的区别是什么
    在PHP中,类继承与接口继承的区别是:PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,而接口支持多继承,也就是接口可以继承一个或者多个接口。 ...
    814
    2023-03-22
    PHP
  • 详细总结Python类的多继承知识
    Python类的多继承知识是非常易于新手理解的,如果你是刚刚入门Python的话,欢迎参考本篇文章,本文对Python类的多继承知识作出了非常详细的解释,还有相关代码参考哦。 ...
    144
    2023-03-22
    Python类的多继承 python类
  • php是前台还是后端语言
    php是后端语言,后端是管理、运营、数据挖掘等非面向访问者的东西;php就是在服务器端执行的脚本语言,其语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己;php同时还支持面向对象和面向过程的开发,使用上非常灵活。 ...
    533
    2023-03-22
    php
  • 谈谈iOS中的多继承与多重代理
    前言多继承和多重代理在swift的语言层面上是不支持的,但我们有时会遇到这样的问题:类B和C分别继承自A,B1和B2继承自B,C1和C2继承自C.现在我们需要在B1和C1中添加相同的方法,怎么去做使用继承的话只能在类A中添加,但这样做的结 ...
    904
    2023-03-22
    ios 多继承 多重代理
  • 面向对象多继承和网络编程
    1.先找左再找右class A(object):passclass B(object):def f1(self):print('B')class C(A,B):passobj = C()obj.f1( ...
    174
    2023-03-22
    面向对象 网络编程
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作