这篇文章主要介绍“PHP中的抽象类与接口详细介绍”,在日常操作中,相信很多人在PHP中的抽象类与接口详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的抽象类与接口详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
抽象类的特点:
abstract class A { public function show(){ $this->getName(); echo PHP_EOL; } protected abstract function getName(); public abstract function getAge($age);}class ChildA1 extends A { public function getName(){ echo "I'm ChildA1"; } public function getAge($age){ echo "Age is " . $age; }}class ChildA2 extends A { protected function getName(){ echo "I'm ChildA2"; } public function getAge($age, $year = ''){ echo "Age is ". $age . ', bron ' . $year; }}$ca1 = new ChildA1();$ca1->show();$ca1->getAge(18);$ca2 = new ChildA2();$ca2->show();$ca2->getAge(20, 2000);
接口的特点:
interface B1 { const B1_NAME = 'Interface B1'; function getName(); function getAge($age);}interface B2 extends B1 { function show();}interface B3 { function getSchool();}class ChildB implements B2, B3{ function getName(){ echo "I'm ChildB"; } function getAge($age, $year = ''){ echo "Age is " . $age; } function show(){ $this->getName(); echo PHP_EOL; $this->getAge(23, 1997); echo PHP_EOL; echo self::B1_NAME; echo PHP_EOL; } function getSchool(){ echo "study in Peking University"; echo PHP_EOL; }}$b = new ChildB();$b->show();$b->getSchool();
从上面我们可以总结出一些抽象类和接口的区别:
那么问题来了,这两货哪个好?抱歉,这个问题可没有答案,它们的作用不同。抽象类可以作为基类,为子类提供公共方法,并定制公共的抽象让子类来实现。而接口则是更高层次的抽象,它可以让我们依赖于抽象而不是具体的实现,为软件开发带来更多的扩展性。
接口,实际上也可以看做是一种契约。我们经常会拿电脑主机箱后面的插口来说明。比如USB接口,我们定义了它的大小,里面的线路格式,不管你插进来的是什么,我们都可以连通。而具体的实现则是取决于电脑软件对插入的硬件的解释,比如U盘就会去读取它里面的内容,而键盘则会识别为一个外设。
从这里可以看出,接口能够为我们程序的扩展提供非常强大的支撑。任何面向对象语言中接口都是非常重要的特性。下面我们来用接口模拟刚刚说的USB插口。
interface USB{ function run();}class Keyboard implements USB{ function run(){ echo "这是键盘"; }}class UDisk implements USB{ function run(){ echo "这是U盘"; }}
这么写有什么好处呢?我们再深入一个概念:依赖注入。如果使用面向接口开发的话:
function testUSB (USB $u){ $u->run();}// 插入U盘testUSB(new UDisk);// 插入键盘testUSB(new Keyboard);
testUSB方法中的$u并不是某个具体实例,只是USB接口的抽象,在不知道它是什么实例的情况下我们通过接口契约,保证它一定会有一个run()方法。而具体的实现,则是在外部我们调用方法的时候注入进来的。
掌握好接口的设计原则,往往就能看懂一大半的框架的设计思想。这也是我们面向对象中最最基础的特性。抽象类作为公共基类来说可以为多态提供比较好的范本,它能够让你的子类有自己的个性又能使用父类的能力。总之,深入场景业务,选择合适的方式实现代码,靠的是能力、经验与智慧的综合,决不是一句谁好谁不好所能定性的。
测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/%E7%8E%A9%E8%BD%ACPHP%E4%B8%AD%E7%9A%84%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.php
参考文档:https://www.php.net/manual/zh/language.oop5.abstract.phphttps://www.php.net/manual/zh/language.oop5.interfaces.phphttps://www.php.net/manual/zh/language.oop5.interfaces.php#79110
到此,关于“PHP中的抽象类与接口详细介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4580631/blog/4362323