关于PHP中的重载

  在面向对象的编程中,重载指的是不同函数使用相同的函数名,但是参数的类型和个数不同。而在PHP中,重载的是当对一个对象或类使用其未定义或者不可访问的属性或方法的时候,调用对应的魔术方法,是对错误的特殊处理机制。

  PHP的重载分为属性重载和方法重载。

  属性重载:

<?php
class man{
		private $age = 10;

		public function __get($key){
			echo '__get::' . $key,'<br />';
		}

		public function __set($key,$value){
			echo '__set::' . $key,$value,'<br />';
		}

		public function __isset($key){
			echo '__isset::' . $key,'<br />';
		}

		public function __unset($key){
			echo '__unset::' . $key,'<br />';
		}

		public function __toString(){
			echo '__toString::<br />' ;
			return 'false';
		}
	}

	$man = new man();
	echo $man->age;
	$man->age = 18;
	isset($man->age);
	unset($man->age);
	echo $man;

我们来看一下浏览器的输出结果:

  方法重载:

<?php
class woman{
		private static function callstatic(){
			echo __METHOD__;
		}

		public function __call($funcname,$args){
			echo __METHOD__,'<br />'; 
			return false;
		}

		public static function __callStatic($funcname,$args){
			echo __METHOD__,'<br />';
			return false; 
		}
	}

	woman::callstatic();

	$woman = new woman();
	$woman->show();

我们来看一下浏览器的输出结果:

  我们看到,在调用未定义或者不可访问属性和方法,本来会发生错误,但是在我们定义了一些魔术方法之后,此时会调用魔术方法,这个就叫做PHP的重载。

  其实,我们可以更加充分的利用这一特殊处理机制,比如在类外访问不可访问属性,可以通过对应的魔术法来进行属性的访问。

<?php
class man{
		private $age = 10;

		public function __get($key){
			return "$key:" . $this->$key;
		}
	}

	$man = new man();
	echo $man->age;

浏览器输出:

  这样一来,我们就实现了访问不可访问属性,虽然这有风险,但也是PHP重载的扩展应用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值