设为首页 收藏本站
查看: 937|回复: 0

[经验分享] PHP面向对象中的相互调用的问题

[复制链接]

尚未签到

发表于 2017-4-10 11:55:06 | 显示全部楼层 |阅读模式
  很多人对面向对象的理解,只停留在将某一功能代码封装到某一个类中。这样的做法,结果是,留给使用者调用。
 但仅仅是这样做。很多程序使用面向对象就无法实现。原因相当简单。因为,某些代码一旦写出来,这个代码不是让别人调用你的函数。而是你要去调用别人的类,别人的函数代码。
 为什么会有这种情况,主要是面向抽象编程时。很多具体的代码,只有在针对具体问题实现时,才能写出来。
 打个比方:
 比如你写一个模板引擎。其中有很多语言标记。你的解析器则需要对所有标记进行解析。但这些标记如果一开始就写全了,那就不可能有扩展性了。
 这时,就需要有一种约定,将标记解析器定义为一个抽象的类,或一个接口,让写具体代码的人去按此约定进行实现。
 这里,我们发现,这不是简单的让别人调用。而是写一个调用别人的代码的程序。
 可见,你调我的,简单。只要你明白我有哪些类,哪些函数。而我调你的,则我要告诉你,你的类要怎样写,其中要有哪些函数。
 使用这样的方法,不仅是易于大应用的功能模块划分,清析的架构,同时,也是降低模块之间的耦合度。
 PHP提供了各种途径来帮助我们实现程序中的“我调你”,这包括:
 抽象函数:必须要由你实现的函数,我将其定义为抽象函数。格式是:
 abstract public function funcName($param /.../ ){};
 抽象函数中无实现的代码。因为实现的代码是要你实现的。
 如果一个类中有抽象函数,那么,此类就是抽象类,不能被实例化成对象。
 但如果,一个类中所有方法全是抽象的,则,我们就不必再定义为抽象类了。我们完全可以使用接口。
 接口定义与类定义相同,只是把class关键字换成interface就行了。
 可见,我给你留下了这些可以填空的空白。填与不填,由你决定。这也就是给你提供了另一方式的“调用”。
 如果你要用此抽象类,你只要继承此类,生成一个具体的类即可。
 同样,如果你要用此接口,你也只要写一个类,实现此接口即可以了。
 有时,我的类是单件模式的,那么,就要在类中加一个保护,保证它永远在此模式下运行。这个保护方式是加一个函数:
 final private function __clone() {}
 函数中无实现代码,是阻止类的复制。这样就保证永远只有一个了。
 由此我们看到了,这里有一个final,final是对函数,对方法实现最终保护。所谓最终保护,就是说它是终点,不会再生出下一代了。
 对函数而言,子类中不会再生成同名函数,对于类,此类再也不可被继承。
 所以,如果某个类不能再被继承,则定义时,前面加一个final。某个方法,包括构造函数,可以在定义前面加上final关键字。
 为什么要这样呢?这样做的目的是为了简单,我可以少写很多代码,同时,你也会在约定的模式之下。保证代码强壮性与安全性。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-362906-1-1.html 上篇帖子: 使用PHP简单网页抓取和内容分析 下篇帖子: php中绕人的类成员访问控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表