您好,欢迎访问一九零五行业门户网

php中 __call 与 __callStatic用法与区别详解

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(); ?>
以上就是php中 __call 与 __callstatic用法与区别详解的详细内容。
其它类似信息

推荐信息