首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

完整的 PHP 依赖倒置原则例程

设计模式中依赖倒置原则( )的定义是“高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。”理解起来并不难,但在具体实现上,网上给出的很多 示例都有缺陷。

就拿这篇文章来说,概念讲的没有问题,但在具体实现上,特别是代码中有很多错误,不能体现 特色,比如 中应该用 而不是用 来调用方法,变量名应该带 等很多错误,这就不说了,最关键的是即使把这些语法错误都改正,例子也不能说明原则,不够有说服力。因为即使不加接口或抽象类,妈妈也一样能给孩子讲故事、读报纸、读杂志。

以下可运行代码,没有用到任何接口和抽象类,一样可以实现功能,并且可扩展,不需要修改 类里的任何代码,一样可以轻松自如地让妈妈读各种读物,无非就是在上面追加各种 ,只要这个 里有 方法,妈妈全部可以识别:

既然如此随意,还如何体现依赖倒置呢?这是因为 是弱类型语言,特点就是不需要为变量指定类型,导致的结果就是只要你的 里有我需要调用的方法(在这里是 方法),那就无论如何也不会出错,至于你是不是实现了什么 接口,都无所谓的。像这样,是无法真正体现依赖倒置原则的。那到底如何才能真正体现依赖倒置呢?秘诀就是我们通过使用PHP的类型约束来规定 函数的 参数必须是一个接口:

在这里,我们规定了 参数必须是一个 接口,那么凡是需要让妈妈讲的读物都必须是对于 这个接口的一个实现,否则就会报错。完整代码如下:

你可以试着把 后面的 去掉然后运行一下,马上就会报错:

所以结论是:对于PHP这种弱类型语言来讲,要想真正实现依赖倒置原则,必须加上类型约束,否则实现的只是表象,并不能真正体现原则的作用。

前端教程

关注即可习得新技能

觉得本文对你有帮助?请分享给更多人。

关注「程序员宝库」公众号,直接获取各种编程资料!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129A10EXI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券