面向对象思想的核心概念
什么是类?什么是对象?
类是由属性和方法组成的抽象组织。
对象是类的具体存在。
PHP中都有哪些魔术方法?它们的作用分别是什么?
PHP中由__(两个下划线)开头的方法开头的都是魔术方法(自定义的方法不属于)。
常用的魔术方法有:
- __set($name,$value)
- __get($name)
- __call($name,$args)
- __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简单实现了:
- 获取类命
- 获取类中的所有常量
- 获取类中的所有属性 (属性名、属性值、静态属性、权限修饰符)
获取类中的所有方法 (方法名、注释、参数、静态方法、权限修饰符)
简述继承、多态和组合
继承和多态同属于面向对象的三大特征之一。
继承是指一个类通过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的异常处理机制
代码示例中使用了set_error_handler函数接管了PHP的内置错误处理方式。
在发成错误时由自定义错误处理方法手动抛出一个异常,phper只需关心发生异常后的补救方式即可。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: