十一:PHP面向对象
PHP类权限控制修饰符,成员访问权限
public 可在类的内部、外部、子类中使用
protected 可在类的内部、子类中使用,可被子类继承
private 只可在类的内部使用,不可被子类继承
单一继承
PHP的类继承是单一继承方式,即只能继承一个类,若有接口的,可以继承一个类、一个接口。
方法重写
子类继承父类,子类中的方法名与父类中的方法名相同时,子类中的方法体会覆盖掉父类中的方法。若想要保留父类中的方法体,并在原有的基础上扩展,可使用parent关键字进行调用
抽象类的定义
关键字 abstract 定义
若类中有抽象方法,类必须定义成一个抽象类。类中没有抽象方法,类也可以定义成抽象方法。抽象方法中抽象类在继承的子类中必须被定义,且子类定义的方法访问控制权限>=父类控制权限
接口的定义
关键字 interface 定义
接口中的方法都是抽象的,方法没有方法体。方法必须时公有,类中必须实现接口中的所有方法
魔术方法
__construct():构造函数 方法名与类名相同,也是构造方法
在创建一个对象时,就会调用此方法,适合在使用对象之前初始化操作
__destruct(): 析构函数 某个对象的所有引用都被删除或者当对象被显式销毁时执行
方法重载
__call(): 在对象中调用一个不可访问方法时,__call()会被调用。
__callStatic(): 在静态上下文中调用一个不可访问方法时,__callStatic()会被调用。
调用了不可访问的方法,会调用__call、__callStatic $name,是不可访问的方名,$arguments是参数数组
属性重载
__get(): 读取不可访问属性的值时,__get()会被调用。
__set(): 读取不可访问属性的值时,__get()会被调用。
__isset(): 当对不可访问属性调用isset()或empty()时,__isset()会被调用
__unset(): 当对不可访问属性调用isset()或empty()时,__isset()会被调用
__sleep(): 此功能可以用于清理对象 属性值被抛弃
__wakeup(): 预先准备对象需要的资源
__toString(): 用于一个类被当成字符串时应怎样回应
对象$class被当成字符串输出__clone(): clone一个对象时调用的方法
设计模式
工厂模式,不需要在文件中多次实例化一个类,而是直接在工厂类中实例化一个类,然后返回这个对象
单例模式,一个类只允许实例化一次,通常情况下,还是在类的内部创建自己。把构造函数的权限设置为private,可实现单例模式。使用场景:连接数据库,在程序执行过程中,没有必要多次连接数据库,这是对资源的浪费。
在类的外部不能创建单例模式的类注册树模式,将实例化的对象注册到注册树上,在全局可以直接使用
适配器模式,
无论时那一种类,封装的方法名称都相同,这就是适配器模式
观察者模式
当一个对象状态发生改变时,依赖它的对象全部接收到通知,并自动更新
场景:一个事件发生后,要执行一连串操作。传统的编成方式是在事件的代码之后,直接加入逻辑。当更新逻辑增多之后,代码也变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体代码。
观察者模式实现了低耦合,非侵入式的通知与更新机制
策略模式
将特定的行为和算法封装成一个类,以适应某些特定的上下文环境。这种模式就是策略模式。
例如:点上针对男性女性用户,广告为的广告不同,跳转的类目也要不同
可实现Ioc 依赖倒置,控制反转
page类中的index方法原本依赖FeMaleUser类或MaleUser类,但是因为策略模式,现在不依赖于任何类。实现了低耦合,高维护的特性