本文操作环境: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的方法
推荐学习:php培训
以上就是php是多继承还是单继承的详细内容,更多请关注亿码酷站其它相关文章!
<!––>php是多继承还是单继承
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除
转载请注明来源:php是多继承还是单继承
本文永久链接地址:https://www.ymkuzhan.com/46797.html
本文永久链接地址:https://www.ymkuzhan.com/46797.html
下载声明:
本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压; 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版! 版权声明:
下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。 免责声明:
您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!