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();
?>
查看本欄目