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

相关推荐
Sagittarius_A*37 分钟前
Burst Lab | PHP 审计 14|反序列化(四):字符串逃逸与绕过技巧
开发语言·安全·php·web·反序列化
筱璦3 小时前
PHP+ VUE3机构级股票分仓管理交易系统源码可出
开发语言·php·vue3·量化·股票分仓
你怎么知道我是队长4 小时前
IPv6 地址完全解析:从结构到实战
开发语言·php
XR1234567884 小时前
工厂车间无线网络怎么选?AGV 与复杂环境是分水岭
开发语言·php
大鹏说大话4 小时前
API 设计之道:用 PHP 构建符合 RESTful 与 GraphQL 规范的高可用接口
php·restful·graphql
大黄说说4 小时前
类型安全时代:PHP 8+ 的联合类型、交集类型与泛型(模板)最佳实践
开发语言·安全·php
PHP实战开发录5 小时前
AI接口结构化输出解析异常排查记录
数据库·安全·ai·php·开发
大鹏说大话6 小时前
PHP 微服务架构实战:从单体应用到分布式系统的演进之路
微服务·架构·php
AC赳赳老秦6 小时前
个保法下数据处理:OpenClaw 自动过滤公开数据中的个人信息,保障采集分析合规性
java·python·sqlite·json·php·deepseek·openclaw
飞翔的火箭弹7 小时前
企业网络资产管理用什么系统工具
开发语言·网络·php