php 5.3 後新增了 call 與callStatic 魔法方法。
call 當要調用的方法不存在或許可權不足時,會自動調用call 方法。
callStatic 當調用的靜態方法不存在或許可權不足時,會自動調用callStatic方法。
call($funcname, $arguments)callStatic($funcname, $arguments)
參數說明:
$funcname String 調用的方法名稱。
$arguments Array 調用方法時所帶的參數。
call 例子
<?phpclass 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例子
<?phpclass 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();?>