php中重载的概念

重载是类的多态的一种体现,Java中的重载是指函数名相同  但是函数形参个数或形参类型不同。与普通的重载概念不同,php中的重载是指对成员的重新加载。具体说来  。当擦做对象的不可访问成员时的处理叫做重载。而不可访问指的是成员不存在或者是由于访问限制而访问不到。如

class Stu{
private $age=10;
}
$stu1=new Stu();
$stu1->name='xiaoming';//属性不存在 为对象自动添加
$stu1->getName();//不存在 报错

上例中 定义了一个Stu类,类内只有$age属性,当将其实例化后,由于类内未定义name属性,$stu1对象添加了该属性,并对该属性赋值。所以相当于该对象访问了不存在的成员,即为PHP中的重载。$stu1对象对不存在的方法getName()的访问也是PHP中的重载。由结果可知,属性的重载和函数的重载的处理结果不同,当属性不存在是,重载会为对象自动添加,而当方法不存在是,系统会报错

在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(): 用静态方式调用一个不可访问方法时,会被自动调用






你可能感兴趣的:(PHP,重载)