PHP的魔术方法2
2014-09-15 19:43
344 查看
前面说到了PHP的魔术方法1(http://blog.csdn.net/u014181418/article/details/39234639),主要说到访问到不可访问的属性时,魔术方法就会自动发挥作用。
这篇文章呢?说的是访问到不可访问的方法时,魔术方法怎样发挥作用。
1、__call
先看个没加魔术方法的例子
我是a方法
我是c方法
Fatal error: Call to private method funMagic::b() from context '' in D:\www\php.php on line 22
显然,a方法,c方法可以被对象调用。b方法因对象权限不足而调用出错,d方法是不存在的方法。
如果加上魔术方法会怎样?
我是a方法
我是c方法
**你不无法调用b方法,原因是权限不足或该方法不存在。
**你不无法调用d方法,原因是权限不足或该方法不存在。
调用b方法,因权限不足,魔术方法__call被自动被调用
调用d方法,因该方法不存在,魔术方法__call被自动被调用
2、__callStatic
__callStatic与__call类似,只不过当对象调用的静态方法权限不足或该方法不存在时,__callStatic自动被调用。
这篇文章呢?说的是访问到不可访问的方法时,魔术方法怎样发挥作用。
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自动被调用。
相关文章推荐
- 讲讲php的魔术方法
- php魔术方法
- PHP 5魔术方法应用浅析
- php 魔术方法使用说明详细
- php 魔术方法
- php的魔术方法
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
- PHP下划线函数即魔术方法汇总
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns
- PHP中用魔术方法__autoload()实现类的自动加载
- 有了PHP 5.3的__callStatic魔术方法,就可以做按类名和方法名同时魔术了
- php魔术方法
- php魔术方法和魔术变量
- 腾讯php面试题总结(一) 15个魔术方法的总结
- PHP中的魔术方法总结
- php 魔术方法使用说明
- PHP中的魔术方法总结 :__construct,__destruct ,__call,__callStatic,__get,__set,__isset,__unset,__sleep,__wakeup, __toString.......
- PHP中的魔术方法总结[__construct/__destruct/__get/__set/__isset/__unset/__toString/__clone等]
- php魔术方法和魔术变量、内置方法和内置变量
- PHP魔术方法