重写
重写又叫覆盖,就是将从父类继承下来的属性或方法重新“定义”——就是从新写。
下级的可见性应该不低于上级的可见性。
方法的参数形式应该跟父类的一致。
私有属性和方法都不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法。只是当作一个自身的新的属性或方法来看待而已。不过方法的参数必须一致。
构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松:重写的时候参数可以不一致。
重载
php中的重载,是另一个“概念”,其指的是:
属性重载:如果使用一个不存在的属性,就会去自动调用类中预先定义好的某个方法以处理数据;
方法重载:如果使用一个不存在的方法,就会去自动调用类中预先定义好的某个方法以处理该行为;
属性重载:
属性有哪些使用情形?其实跟变量一样,只有4种使用情形:
取值:$v1 = 对象->属性;
赋值:对象->属性 = XX值;
判断是否存在:isset(对象->属性;)
销毁:unset(对象->属性;)
所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如何来“应对”的问题。
如果某属性不存在,但在语法中使用如下情形,则会发生:
取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法
赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法
判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法
销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法
前提都是:类中要预先定义好这些方法。
方法重载:
当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的"__call"方法。
当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。其中,该方法必须带2个参数。和__call一样。