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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值