php抽象类-抽象方法和重载overloading技术
1、1.抽象类
就是一个不能实例化(不能new)的类。
定义形式:
abstract class 类名{
//跟之前一样,定义类的成员就行
}
2、2.为什么需要这样一个“抽象类”——它不能实例化对象。
请看如下代码:
3、3.可见:
抽象类的目的不是为了得到一个自己的对象,而是为了“后代类”服务,给后代类提供一定的属性和方法。
再看一个具体一点的应用场景:
4、4.抽象方法:
抽象方法,就是一个“啥也不做”的方法:
定义形式:
abstract function 方法名(形参1,形参2,... );
可见:
1,抽象方法,只定义方法头,没有大括号部分的方法体;
2,可以看到,该方法实际上没有任何可执行的代码,自然并不能做任何事情;
3,该方法是“专用于被覆盖(重写)”;——实际上,抽象方法,是要求下级必须重写。
1、1:__set($name, $value):
当对一个对象的未定义的属性,进行“赋值”时,此时会自动调用类中预先定义好的魔术方法:__set();
该方法带2个参数:
$name : 表示该正在赋值的未定义的属性名;
$value : 表示该正在赋值的值;
实际上,之所以对一个对象的未定义的属性进行赋值,自然是希望该对象来保存该数据。
举例:
2、2: __get($name)方法
当对一个对象的未定义的属性,进行“取值”时,此时会自动调用类中预先定义好的魔术方法:__get();
该方法带1个参数:
$name : 表示该正在取值的未定义的属性名;
代码示例:
3、3.测试结果:
4、4:__isset()判断:
当对一个对象的未定义的属性,进行“isset()”判断时,此时会自动调用类中预先定义好的魔术方法:__isset();
该方法带1个参数:
$name : 表示该正在isset()的未定义的属性名;
5、5.测试代码结果:
6、
6:__unset()销毁:
当对一个对象的未定义的属性,进行“unset()”操作时,此时会自动调用类中预先定义好的魔术方法:__unset();
该方法带1个参数:
$name : 表示该正在unset()的未定义的属性名;
1、1.__call():
当对一个“对象”使用一个未定义的方法的时候,会自动调用类中预先定义的__call()这个魔术方法。
该方法带2个参数:
$name: 代表正在使用的这个未定义的方法名;
$args: 代表正在使用的这个未定义的方法所使用的实参数据,是一个数组。
比如:
class A{
}
$a1 = new A();
$a1->f1(); //f1方法其实未定义,此时就会调用类中的__call()方法;
//如果类中没有__call()方法,此时就会报错。
2、2.于是,我们来定义该方法:__call()
3、3.应用:
利用PHP的方法重载机制,可以实现通常面向对象语言中的“重载现象”!