php是多继承还是单继承

本文操作环境: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

猜你喜欢

  • php是多继承还是单继承

    php是单继承。php是不支持多继承的,但是php可以通过使用interface或者trait实现多继承,如【interface test1 {public function connect();}interface test2 ...】。
    阅读数:133 php 单继承 多继承
  • 告诉你如何破解PHP单继承魔咒

    这篇文章主要给大家介绍了关于如何破解PHP单继承魔咒的相关资料,Trait 是为类似 php 的单继承语言而准备的一种代码复用机制,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
  • php中类继承与接口继承的区别是什么

    在PHP中,类继承与接口继承的区别是:PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,而接口支持多继承,也就是接口可以继承一个或者多个接口。
    阅读数:803 PHP
  • php是视频还是图片

    php不是视频也不是图片,php是一种创建动态交互性站点的强有力的服务器端脚本语言;PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己。
    阅读数:424 php
  • php是前台还是后端语言

    php是后端语言,后端是管理、运营、数据挖掘等非面向访问者的东西;php就是在服务器端执行的脚本语言,其语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己;php同时还支持面向对象和面向过程的开发,使用上非常灵活。
    阅读数:511 php
  • 怎么查看php是ts还是nts

    在PHP中,可以利用phpinfo()函数来查看php是ts版本还是nts版本,该方法可以展示出当前phpinfo信息,若“Thread Safety”项的信息是“enabled”,一般来说就表示ts版本,否则就是nts版本。
    阅读数:906 php
  • PHP中类继承关系的示例分析

    这篇文章将为大家详细讲解有关PHP中类继承关系的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能。假设大致有这么一
    阅读数:509 php
  • php怎么判断是安卓还是ios开发

    php判断是安卓还是ios的方法:1、创建一个PHP示例文件;2、通过“function get_device_type(){...}”方法实现判断;3、调用“Objective-C”函数获取到手机类型即可。
    阅读数:842 php 安卓 ios
  • php怎么判断是get还是post请求

    php中可利用变量“$_SERVER”来判断是get还是post请求,语法“if($_SERVER['REQUEST_METHOD']==='GET')”或“if($_SERVER['REQUEST_METHOD']==='POST')”。
    阅读数:727 php 请求类型 get post
  • php实现继承的关键词是什么

    php实现继承的关键词是“extends”。PHP中只能使用单继承模式,即一个类只能直接从另一个类中继承数据;而类的继承需要通过“extends”关键字来实现,语法“class 子类名 extends 父类名{... ...}”。
    阅读数:297 php 继承
  • PHP中Smarty模板如何实现模板继承

    这篇文章主要介绍PHP中Smarty模板如何实现模板继承,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!{extends}模板继承中,你可以在子模板内使用{extends}标签来扩展父模板。 1.{extends}必须
    阅读数:296 php smarty
  • PHP面向对象之封装,继承与多态详解

    面向对象的三大特点是封装、继承、多态。本文将通过示例详细讲讲这三者的使用,文中示例代码讲解详细,需要的可以参考一下
  • php是编译型语言还是解释性语言

    php是解释型语言。php是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言;PHP解释器会将PHP代码解释为opcode之后再交由Zend引擎执行。
  • php怎么判断是关联数组还是索引数组

    判断方法:1、用array_values()将指定数组转为索引数组;2、用array_diff_key()比较原数组和索引数组的键名,返回一个差集数组;3、用empty()判断差集数组是否为空数组,如果是则原数组为索引数组,反之为关联数组。
    阅读数:854 php 关联数组 索引数组
  • php的array()操作的是数组还是对象

    在PHP中,array()操作的是数组,是允许对数组操作的函数,该函数的作用是创建数组;PHP支持单维和多维的数组,同时提供了用数据库查询结果来构造数组的函数,语法为“array(value1,value2,value3,etc.)”或者“array(key=>value,key=>value,key=>value,etc.)”。本文操作环境:Windows10系统、PHP8.1版、Dell G3电
    阅读数:751 php
  • php如何判断字符串是中文还是英文

    php判断字符串是中文还是英文的方法:在php项目中自定义一个函数方法,通过“preg_match("/^[^\x80-\xff]...);”判断是否是英文以及“preg_match("/^[".chr(0xa1)."-".chr..."]
    阅读数:405 PHP 字符串
  • php中继承类和实现接口的区别是什么

    php中继承类和实现接口的区别:1、PHP继承属于单继承,保证了单一性,但不够灵活,而实现接口就是对单一继承的补充;2、实现接口可以在不破坏层级关系的前提下,对某个类功能扩展。
    阅读数:634 PHP
  • php用win还是linux系统

    php可以用win也可以用linux系统,他们各有好处,比如:1、windows服务器操作方便适用于php初学者;2、Linux服务器适用于php成熟者,能够更好搭建LAMP环境等。
    阅读数:776 php win linux
  • php怎么判断奇数还是偶数

    php判断奇数还是偶数的方法:1、新建一个php文件;2、定义一个变量;3、使用“%”取模运算符将数字10对2取模;4、使用if语句判断上一步的结果,并通过echo输出提示即可。
    阅读数:585 php
  • php 怎么实现判断联通还是电信

    php实现判断联通还是电信的方法:1、创建一个HTML页面并通过js代码验证手机号码是否正确;2、通过PHP代码“public function phone_check(){...}”判断号码是联通还是电信即可。
    阅读数:935 php