PHP的魔术方法2

前面说到了PHP的魔术方法1(http://blog.csdn.net/u014181418/article/details/39234639),主要说到访问到不可访问的属性时,魔术方法就会自动发挥作用。

这篇文章呢?说的是访问到不可访问的方法时,魔术方法怎样发挥作用。

1、__call

先看个没加魔术方法的例子

<?php

class funMagic{
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public function a(){
<span style="white-space:pre">		</span>echo '我是a方法<br/>';
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>private function b(){
<span style="white-space:pre">		</span>echo '我是b方法<br/>';
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>public function c(){
<span style="white-space:pre">		</span>echo '我是c方法<br/>';
<span style="white-space:pre">	</span>}

}

$ob = new funMagic();
$ob->a();
$ob->c();
$ob->b();
$ob->d();

?>
运行结果:

我是a方法
我是c方法
Fatal error: Call to private method funMagic::b() from context '' in D:\www\php.php on line 22

显然,a方法,c方法可以被对象调用。b方法因对象权限不足而调用出错,d方法是不存在的方法。

如果加上魔术方法会怎样?

<?php

class funMagic{
	
	public function a(){
		echo '我是a方法<br/>';
	}

	private function b(){
		echo '我是b方法<br/>';
	}

	public function c(){
		echo '我是c方法<br/>';
	}

	public function __call($method,$argument){
		echo '**你不无法调用'.$method.'方法,原因是权限不足或该方法不存在。<br/>';
	}

}

$ob = new funMagic();
$ob->a();
$ob->c();
$ob->b();
$ob->d();

?>
运行结果:

我是a方法
我是c方法
**你不无法调用b方法,原因是权限不足或该方法不存在。
**你不无法调用d方法,原因是权限不足或该方法不存在。

调用b方法,因权限不足,魔术方法__call被自动被调用

调用d方法,因该方法不存在,魔术方法__call被自动被调用

2、__callStatic

__callStatic与__call类似,只不过当对象调用的静态方法权限不足或该方法不存在时,__callStatic自动被调用。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值