php __call 与 __callStatic对比
来源:互联网 发布:女命七杀格 知乎 编辑:程序博客网 时间:2024/06/05 17:19
PHP 5.3 后新增了 __call 与__callStatic 魔法方法。
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)__callStatic($funcname, $arguments)
参数说明: $funcname String
调用的方法名称。 $arguments Array
调用方法时所带的参数。
__call 例子
<?php class Member{ protected $memberdata = array(); public function __call($func, $arguments){ list($type, $name) = explode('_', $func); if(!in_array($type, array('set','get')) || $name==''){ return ''; } switch($type){ case 'set': $this->memberdata[$name] = $arguments[0]; break; case 'get': return isset($this->memberdata[$name])? $this->memberdata[$name] : ''; break; default: } } } class User extends Member{ public function show(){ if($this->memberdata){ foreach($this->memberdata as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } class Profession extends Member{ public function show(){ if($this->memberdata){ foreach($this->memberdata as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } $userobj = new User(); $userobj->set_name('fdipzone'); $userobj->set_age(29); $userobj->show(); $probj = new Profession(); $probj->set_profession('IT SERVICE'); $probj->set_price(2500); $probj->show(); ?>
__callStatic例子
<?php class Member{ protected static $memberdata = array(); public static function __callStatic($func, $arguments){ list($type, $name) = explode('_', $func); if(!in_array($type, array('set','get')) || $name==''){ return ''; } $feature = get_called_class(); switch($type){ case 'set': self::$memberdata[$feature][$name] = $arguments[0]; break; case 'get': return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : ''; break; default: } } } class User extends Member{ public static function show(){ $feature = get_called_class(); if(self::$memberdata[$feature]){ foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } class Profession extends Member{ public static function show(){ $feature = get_called_class(); if(self::$memberdata[$feature]){ foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } User::set_name('fdipzone'); User::set_age(29); User::show(); Profession::set_profession('IT SERVICE'); Profession::set_price(2500); Profession::show(); ?>
阅读全文
0 0
- php __call 与 __callStatic对比
- php __call 与 __callStatic
- php __call 与 __callStatic
- PHP 魔术方法之 __call 与 __callStatic
- php的__call 与__callStatic 方法
- php __call() 和 __callStatic()
- php __call 和 __callStatic
- php中__call与__callstatic关系与区别
- PHP魔术方法之__call与__callStatic方法
- PHP魔术方法之__call与__callStatic方法
- PHP魔术方法之__call与__callStatic方法
- PHP魔术方法之__call与__callStatic方法
- PHP魔术方法之__call与__callStatic方法
- PHP魔术方法之__call与__callStatic方法
- php之__call()和 __callStatic()
- PHP 魔法方法之__call和__callStatic
- php魔术方法__call和__callStatic
- php之重载__get() __set() isset() unset() __call() __callStatic()
- 常用git命令
- ACM TOJ1292 排序
- 最优二叉树概念 (哈夫曼树)
- javascript笔记2017/8/21-跳转到子页,输入信息,返回到父页
- 较快入门postman,使用postman玩转接口测试 一
- php __call 与 __callStatic对比
- Dubbo+Zookeeper+Spring的demo--远程调用初探
- 工作流 快速启动
- 后缀式求值
- 【转载】AJAX
- RSA公钥、私钥生成,详细讲解
- case when then else end
- Thrift 在Windows下的安装与实例 vs2010
- Linux notes:正则表达式2--Sed