In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-28 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/03 Report--
This article mainly explains "how to understand whether php is multi-inheritance or single-inheritance". The explanation in this article is simple and clear, easy to learn and understand. Please follow the ideas of Xiaobian slowly and deeply to study and learn "how to understand whether php is multi-inheritance or single-inheritance" together!
PHP is a single inheritance. PHP does not support multiple inheritance, but PHP can implement multiple inheritance by using interface or trait, such as [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的方法感谢各位的阅读,以上就是"如何理解php是多继承还是单继承"的内容了,经过本文的学习后,相信大家对如何理解php是多继承还是单继承这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.