重载是类的多态的一种体现,Java中的重载是指函数名相同 但是函数形参个数或形参类型不同。与普通的重载概念不同,php中的重载是指对成员的重新加载。具体说来 。当擦做对象的不可访问成员时的处理叫做重载。而不可访问指的是成员不存在或者是由于访问限制而访问不到。如
class Stu{ private $age=10; } $stu1=new Stu(); $stu1->name='xiaoming';//属性不存在 为对象自动添加
$stu1->getName();//不存在 报错
在PHP中使用魔法方法处理重载情况
按照处理的内容不同 分为属性重载和方法重载
对属性的操作大概可以归为属性的读、写、判断属性是否存在和属性的删除四种操作,每种操作对应一个魔法函数
读:__get() 当试图访问一个不可访问的属性值时,会自动调用
写:__set(属性名、属性值) 设置一个不可访问的值时 自动调用
判断属性是否存在:__isset() 当试图判断一个不可访问的属性是否存在时自动调用
属性的删除:unset() 当试图删除一个不可访问的成员时自动调用
以__get()魔法方法为例,私有属性在外部是不能被访问的,为了保证私有方法在外部不被访问到,需要在魔术方法中限定可以访问到的属性。在本例中,将可访问到的属性保存在一个数组中,当访问属性时,如果该属性在数组中,将允许访问;如果不在数组中,将阻止其访问
class Stu{ private $age=10; public function __set($name,$value){ $property=array('age','name','id');//允许在外部操作的属性名称 if(in_array($name,$proerty)){ $this->$name=$value; } } } $stu1=new Stu(); echo $stu1->age;访问限制 报错
关于方法魔法函数有_call()和_staticCall()
__call(): 在对象中调用一个不可访问方法时,会被自动调用
__staticCall(): 用静态方式调用一个不可访问方法时,会被自动调用