面向对象思想的核心概念

什么是类?什么是对象?

类是由属性和方法组成的抽象组织。
对象是类的具体存在。

PHP中都有哪些魔术方法?它们的作用分别是什么?

PHP中由__(两个下划线)开头的方法开头的都是魔术方法(自定义的方法不属于)。

常用的魔术方法有:

  1. __set($name,$value)
  2. __get($name)
  3. __call($name,$args)
  4. __callStatic()

以上4个魔术方法的作用都是在对象调用不存在的属性或方法时,使程序不会报错的一种兼容操作。
set和get作用于属性
call作用于方法
callStatic作用于静态方法

5. __toString()

toString方法相当于一种序列化方式,例如将一个对象使用toString方法转换为一个字符串,使用echo 输出。
PHP中的序列化方法还有json_encode、serialize…它们本质上是相同的。

6. __construct()

初始化方法。
在实例化一个对象时会先调用此方法,常用于对象的初始化操作。
在PHP5.3.3之前初始化方法为与类命相同的方法,在5.3.3之后为了满足兼容性,如果类中没有construct方法并且也没有葱父类继承,PHP会尝试寻找旧式方法。

7. __destruct()

析构方法。
在程序终止时调用。包括exit()或者die()

反射是什么?反射的作用是什么?

反射的简单解释是:根据到达地找到来源地。
面向对象编程赋予了对象的自省能力即反射API,通过反射可以获取或导出类,也可以获取到类的方法、属性包括注释和私有。
so 反射常用于自动生成文档等。

反射的应用,实现一个简单示例

github 代码示例
代码示例通过反射API简单实现了:

  1. 获取类命
  2. 获取类中的所有常量
  3. 获取类中的所有属性 (属性名、属性值、静态属性、权限修饰符)
  4. 获取类中的所有方法 (方法名、注释、参数、静态方法、权限修饰符)

简述继承、多态和组合

继承和多态同属于面向对象的三大特征之一。
继承是指一个类通过extends或其他关键字成为另一个类的子类。
多态是指同一个类的对象收到相同的消息时会得到不同的结果。
组合是指通过属性的方式得到某个对象。
继承、组合和多态的意义归根结底都是为了简化代码提高复用性,不同的是继承是用于类的复用,多态是用于方法的复用。
在PHP中多态的实现不是很好,原因在于PHP是一门动态语言,PHP本身就是多态。

继承与组合的区别

继承是一种“是,像”的关系;
组合是一种“需要”的关系;

继承与组合的优劣势

继承的优点:

  • 大大简化了代码

继承的缺点:

  • 破坏了封装性
  • 耦合度太高
  • 扩展时复杂性提高
  • 不恰当的使用会破坏现实世界的逻辑

so 在情况允许的前提下优先考虑组合

简述PHP中的Interface

Interface即接口,其起到的主要为“契约、规范”的作用。
接口类似于抽象类,其没有方法主体
被implements关键字实现的类必须实现接口中的所有方法。
“契约”作用也就是说接口中定义的方法实现类必须全部实现,否则会报错。

但PHP中的接口没有起到起到这样的作用,例如调用一个接口不存在的方法PHP也不会报错,所以显得有点鸡肋。

简述PHP中的异常处理机制。

PHP将所有的程序异常都视作错误。
在PHP中所有的异常必须手动抛出才会被捕获到。

如何接管PHP内置的错误处理

通过set_error_handler()函数可以接管。
其定义如下

mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )

实现一个类Java的异常处理机制

github 代码示例

代码示例中使用了set_error_handler函数接管了PHP的内置错误处理方式。
在发成错误时由自定义错误处理方法手动抛出一个异常,phper只需关心发生异常后的补救方式即可。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!