php中__call与__callstatic()使用
2013-09-06 10:23
190 查看
php 5.3 后新增了 __call 与__callStatic 魔法方法。
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
__call:
__callstatic:
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
__call:
1 <?php class Pc { function __call($name,$arguments) { print("调用的未定义的函数名: $name,"); if(is_int($arguments[0])){ echo '传入的第一个参数为整形数:'.$arguments[0].'<br />'; }else if(is_string($arguments[0])){ echo '传入的第一个参数为字符串:'.$arguments[0].'<br />'; } } } $pc = new Pc(); $pc->fun_pc1(2); $pc->fun_pc2('字符abc'); ?> /* 调用的未定义的函数名: fun_pc1,传入的第一个参数为整形数:2 调用的未定义的函数名: fun_pc2,传入的第一个参数为字符串:字符abc */
<?php class Pc{ function __call($name,$arguments) { echo '你调用的函数'.$name.'(参数:'; print_r($arguments); echo '不存在<br />'; } } $pc = new Pc(); $pc->fun_pc1(1,2,3); $pc->fun_pc2('a1','a2'); ?> /* 你调用的函数fun_pc1(参数:Array ( [0] => 1 [1] => 2 [2] => 3 ) 不存在 你调用的函数fun_pc2(参数:Array ( [0] => a1 [1] => a2 ) 不存在 */
__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(); ?>
相关文章推荐
- PHP魔术方法之__call与__callStatic使用方法
- PHP 范围解析操作符,__call(),__callstatic()的使用
- PHP中的魔术方法之__call()和__callStatic()方法的使用
- [李景山php] php中call_user_func_array 的使用
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns
- php的魔法方法__call使用
- php魔术方法__call和__callStatic
- php __call 与 __callStatic
- php数据库操作model类(使用__call方法)
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- PHP魔术方法之__call与__callStatic方法
- php -- 魔术方法 之 调用方法:__call()、__callStatic()
- php __call() 和 __callStatic()
- php之__call()和 __callStatic()
- php中__call与__callstatic关系与区别
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- php的call_user_func_array()使用场景
- PHP 魔术方法之 __call 与 __callStatic
- php __call 与 __callStatic
- [资料]PHP中的__call使用