jtahstu的博客

root@jtahstu.com   Github   英文博客  

最新碎语:以后没事写写小的知识点吧

您的位置:jtahstu的博客 >笔记> PHP 面向对象 知识点总结

PHP 面向对象 知识点总结



主要是《PHP核心技术与最佳实践》 - 读书笔记 的第一章部分,只是部分重点知识的总结,这一章值得好好学习

论排版的重要性:https://www.zybuluo.com/jtahstu/note/913749


《PHP核心技术与最佳实践》 - 读书笔记

读书笔记


1 面向对象思想的核心概念

1.0 面向对象的核心思想

  1. 对象封装可重用性可扩展性

1.1 面向对象的“形”与“本”

  1. 类是对象的抽象组织,对象是类的具体存在
  2. 对象的概念以及二者之间的关系 
    • 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
    • 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
    • 方法描述不同属性所导致的不同表现。
    • 类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子。

1.2 魔术方法的应用

  1. 魔术方法是以两个下划线开头,可以看做 PHP 的语法糖

    • 语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。PHP 里的引用、SPL 等都属于语法糖。
  2. PHP提供的“重载”指动态的“创建”类属性和方法。因此,__set 和__get 方法被归到重载里

  3. 当调用一个不可访问的方法(如未定义,或者不可见)时,__call()会被调用
  4. 实际上,__toString 方法也是一种序列化

1.3 继承与多态

  1. 继承是一种“是、像”的关系,而组合是一种“需要”的关系
  2. 低耦合指模块与模块之间,尽可能的使模块间独立存在;模块与模块之间的接口尽量少而简单。
  3. 继承存在的问题 
    • 继承破坏封装性
    • 继承是紧耦合的
    • 继承扩展复杂
    • 不恰当的使用继承可能违反现实世界中的逻辑
  4. 组合的缺点 
    • 在创建对象时,组合需要一一创建局部对象,这一定程度上增加了代码
  5. Traits 可以方便我们实现对象的扩展,是除 extend、implements 外的另一种扩展对象的方式
  6. 多态的含义 
    • 多态指同一类的对象在运行时的具体化
    • PHP 语言是弱类型的,实现多态更简单、更灵活
    • 类型转换不是多态
    • PHP 中父类和子类看做“继父”和“继子”关系,它们存在继承关系,但不存在血缘关系。因此子类无法向上转型为父类,从而失去多态最典型的特征
    • 多态的本质就是 if...else,只不过实现的层级不同

1.4 面向接口编程

  1. 接口定义一套规范,描述一个“物”的功能,要求如果现实中的“物”想成为可用,就必须实现这些基本功能。接口这样描述自己:“对于实现我的所有类,看起来都应该像我现在这个样子”
  2. 接口为抽象而生
  3. PHP 中,接口的语义是有限的,使用接口的地方并不多,PHP 中接口可以淡化为设计文档,起到一个团队基本契约的作用。
  4. Traits 可以被视为一种加强型的接口。Traits 和接口很像,不同的是 Traits 是可以导入包含代码的接口。
  5. 接口的几个概念 
    • 接口作为一种规范和契约存在
    • 接口只是一个声明
    • PHP 的接口存在两个不足,一是没有契约作用,二是缺少足够多的内部接口

1.5 反射

  1. 反射指在 PHP 运行状态中,扩展分析 PHP 程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
  2. 反射可以用于文档生成
  3. 用到反射的地方不多:一个是对对象进行调试,另一个是获取类的信息

1.6 异常和错误处理

  1. PHP 里的异常,是程序运行中不符合预期的情况及与正常流程不同状况
  2. 在 PHP 里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误)
  3. PHP 一旦遇到非正常代码,通常都会触发错误,而不是抛出异常
  4. PHP 只有手动抛出异常后才能捕获异常
  5. 异常处理机制可以把每一件事当做事务考虑,还可以把异常看成一种内建的恢复系统
  6. PHP 中的错误级别 
    • deprecated ,不推荐,不建议
    • notice,一般告诉你语法中存在不当的地方,这种错误不影响 PHP 正常流程
    • warning,语法中出现很不恰当的错误,需要修改代码
    • fetal error,致命错误,这种问题非改不可
    • prase error,语法解析错误

1.7 本章小结

  1. 到底面向过程和面向对象孰优孰劣呢? 
    二者间并无高低优劣之别,它们各有优劣
  2. 函数式编程
+



有参考意义的链接

      1. 维基百科 - 面向对象编程设计
      2. 百度百科 - 面向对象
      3. 如何用一句话说明什么是面向对象思想? - 知乎
      4. 什么是对象,为什么要面向对象,怎么才能面向对象? - 赵学智 - 博客园
      5. 如何通俗易懂地举例说明“面向对象”和“面向过程”有什么区别? - 知乎
      6. 面向对象编程 - 话题精华 - 知乎





---

本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,欢迎转载,演绎或用于商业目的。

---

二维码加载中...

扫一扫移动端访问O(∩_∩)O

发表评论

13 + 98 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交
正在加载中……