
主要是《PHP核心技术与最佳实践》 - 读书笔记 的第一章部分,只是部分重点知识的总结,这一章值得好好学习
论排版的重要性:https://www.zybuluo.com/jtahstu/note/913749
《PHP核心技术与最佳实践》 - 读书笔记
读书笔记
1 面向对象思想的核心概念
1.0 面向对象的核心思想
- 对象、封装、可重用性和可扩展性
1.1 面向对象的“形”与“本”
- 类是对象的抽象组织,对象是类的具体存在
-
对象
和类
的概念以及二者之间的关系
- 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
- 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
- 方法描述不同属性所导致的不同表现。
- 类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子。
1.2 魔术方法的应用
-
魔术方法
是以两个下划线开头,可以看做 PHP 的语法糖
- 语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。PHP 里的引用、SPL 等都属于语法糖。
-
PHP提供的“重载”指动态的“创建”类属性和方法。因此,__set 和__get 方法被归到重载里
- 当调用一个不可访问的方法(如未定义,或者不可见)时,__call()会被调用
- 实际上,__toString 方法也是一种序列化
1.3 继承与多态
- 继承是一种“是、像”的关系,而组合是一种“需要”的关系
- 低耦合指模块与模块之间,尽可能的使模块间独立存在;模块与模块之间的接口尽量少而简单。
-
继承存在的问题
- 继承破坏封装性
- 继承是紧耦合的
- 继承扩展复杂
- 不恰当的使用继承可能违反现实世界中的逻辑
-
组合的缺点
- 在创建对象时,组合需要一一创建局部对象,这一定程度上增加了代码
- Traits 可以方便我们实现对象的扩展,是除 extend、implements 外的另一种扩展对象的方式
-
多态的含义
- 多态指同一类的对象在运行时的具体化
- PHP 语言是弱类型的,实现多态更简单、更灵活
- 类型转换不是多态
- PHP 中父类和子类看做“继父”和“继子”关系,它们存在继承关系,但不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特征
- 多态的本质就是 if...else,只不过实现的层级不同
1.4 面向接口编程
- 接口定义一套规范,描述一个“物”的功能,要求如果现实中的“物”想成为可用,就必须实现这些基本功能。接口这样描述自己:“对于实现我的所有类,看起来都应该像我现在这个样子”
- 接口为抽象而生
-
PHP 中,接口的语义是有限的,使用接口的地方并不多,PHP 中接口可以淡化为
设计文档
,起到一个团队基本契约
的作用。 -
Traits
可以被视为一种加强型的接口。Traits 和接口很像,不同的是 Traits 是可以导入包含代码的接口。 -
接口的几个概念
- 接口作为一种规范和契约存在
- 接口只是一个声明
- PHP 的接口存在两个不足,一是没有契约作用,二是缺少足够多的内部接口
1.5 反射
- 反射指在 PHP 运行状态中,扩展分析 PHP 程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
-
反射可以用于
文档生成
- 用到反射的地方不多:一个是对对象进行调试,另一个是获取类的信息
1.6 异常和错误处理
- PHP 里的异常,是程序运行中不符合预期的情况及与正常流程不同状况
- 在 PHP 里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误)
-
PHP 一旦遇到非正常代码,通常都会
触发错误
,而不是抛出异常
-
PHP 只有
手动抛出异常
后才能捕获异常 - 异常处理机制可以把每一件事当做事务考虑,还可以把异常看成一种内建的恢复系统
-
PHP 中的错误级别
- deprecated ,不推荐,不建议
- notice,一般告诉你语法中存在不当的地方,这种错误不影响 PHP 正常流程
- warning,语法中出现很不恰当的错误,需要修改代码
- fetal error,致命错误,这种问题非改不可
- prase error,语法解析错误
1.7 本章小结
-
到底面向过程和面向对象孰优孰劣呢?
二者间并无高低优劣之别,它们各有优劣 - 函数式编程
有参考意义的链接
---
本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,转载必须注明作者和本文链接。
---
发表评论