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博客

相关推荐
JaguarJack8 小时前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo8 小时前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack1 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo1 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack2 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay3 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 天前
CTF 伪协议
php
BingoGo5 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack5 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo6 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php