PHP对象设计(《深入PHP》第六章内容笔记)

注意:以下代码示例只是为了简单对比面向过程和面向对象二者区别,并不代表实际项目中的解析和写入文件的最优解;

目录

第一部分:理论知识

一、面向对象与面向过程有何不同?

二、面向对象-选择类

三、面向对象-多态

四、面向对象-封装

五、面向接口编程,而不是实现

六、需要修改代码的四个方向

第二部分:代码示例

一、数据读取和写入文件的工具(面向过程)

二、数据读取和写入文件的工具(面向对象)


第一部分:理论知识

一、面向对象与面向过程有何不同?

1、面向过程的代码也使用对象,有对象并不一定是面向对象设计,即使在Java等必须使用对象的编程语言也一样;

2、面向对象与面向过程代码区别:职责的分配方式。

        * 面向对象:将处理任务的职责转移到系统对象上,尽量减少依赖关系;

          客户端调用层将无需感知读写实现细节,只需知道使用的对象有提供读写方法即可。

        * 面向过程:一系列方法调用,自上而下的控制,会导致项目代码重复和相互依赖。     

3、面向对象与面向过程代码区别:内聚

        * 面向对象:把相关的处理集中在一个上下文;

        * 面向过程:把同一个处理代码分散在多个函数之中;

4、面向对象与面向过程代码区别:耦合

        * 面向对象:子类之间、子类与客户端之间,都解耦,新增一个需求,只需简单创建一个新的子类;

        * 面向过程:各部分代码紧密捆绑在一起,当一个组件变化,其他组件也要跟着变化;

二、面向对象-选择类

        模拟真实世界,面向系统经常就是真实世界的映射例如:Person、Invoice、Shop等,定义类找出系统中的事物,把类看作名词,即一系列动词的主语,让一个类只负担一个主要职责;

三、面向对象-多态

        1、多态也称“类切换”,也是面向对象系统的基本特性之一;

        2、多态是指一个共通接口后面有着多种实现:如果代码中存在很多条件分支语句时,就需要多态出场了,需要创建多个子类,实现抽象基类的方法;

        3、多态并没有完全消除条件语句,例如在代码示例中,getInstance()就会用switch或者if来决定返回哪个对象;多态将条件语句集中在一起;

四、面向对象-封装

        1、封装:对客户端隐藏数据和功能,也是面向对象重要概念之一;

        2、实现封装最简单办法:将属性声明为private或proteced隐藏属性,避免对象数据被破坏;

        3、多态也是另一种形式的封装,在共通接口后面提供不同实现,对客户端隐藏了实现的细节;

五、面向接口编程,而不是实现

        从抽象基类的角度来思考,而不是具体的子类

六、需要修改代码的四个方向

        1、代码重复,提取共通代码;

        2、尽量让类只知道内部的事情;

        3、万能的类:例举出类的职责;

        4、条件语句:如果频繁检查某个条件,说明可能需要分为两个或多个类;

第二部分:代码示例

一、数据读取和写入文件的工具(面向过程)

说明:以下示例仅适用于场景简单的情况,如果增加需求,还需要支持读写xml格式文件,按照面向过程写法,在读文件函数readContent()和写文件函数writeContent(),都需要先判断文件格式,再根据格式转换;

问题点:如果加一个需求多一种文件格式解析,就需要把所有函数加上判断格式的检查;

php将文本内容写入一个文件(面向过程写法)-CSDN博客

二、数据读取和写入文件的工具(面向对象)

php将文本内容写入一个文件(面向对象写法)-CSDN博客

你可能感兴趣的:(php,php)