微信扫描关注IT共享导航

最新资源微信免费首发共享

php __call 与 __callStatic ——IT共享导航

:超级管理员     :2016-12-16     :1169

PHP 5.3 后新增了 __call__callStatic 魔法方法。

__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。

__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。


__call($funcname, $arguments)

__callStatic($funcname, $arguments)


参数说明:

$funcname String 调用的方法名称。

$arguments Array 调用方法时所带的参数。


__call 例子

[php] view plain copy

  1. <?php  

  2.   

  3. class Member{  

  4.   

  5.     protected $memberdata = array();  

  6.   

  7.     public function __call($func$arguments){  

  8.         list($type$name) = explode('_'$func);  

  9.       

  10.         if(!in_array($typearray('set','get')) || $name==''){  

  11.             return '';  

  12.         }  

  13.   

  14.         switch($type){  

  15.             case 'set':  

  16.                 $this->memberdata[$name] = $arguments[0];  

  17.                 break;  

  18.               

  19.             case 'get':  

  20.                 return isset($this->memberdata[$name])? $this->memberdata[$name] : '';  

  21.                 break;  

  22.               

  23.             default:  

  24.         }  

  25.   

  26.     }  

  27.   

  28. }  

  29.   

  30.   

  31. class User extends Member{  

  32.   

  33.     public function show(){  

  34.         if($this->memberdata){  

  35.             foreach($this->memberdata as $key=>$member){  

  36.                 echo $key.':'.$member.'<br>';  

  37.             }  

  38.         }  

  39.     }  

  40.   

  41. }  

  42.   

  43.   

  44. class Profession extends Member{  

  45.   

  46.     public function show(){  

  47.         if($this->memberdata){  

  48.             foreach($this->memberdata as $key=>$member){  

  49.                 echo $key.':'.$member.'<br>';  

  50.             }  

  51.         }  

  52.     }  

  53.   

  54. }  

  55.   

  56. $userobj = new User();  

  57. $userobj->set_name('fdipzone');  

  58. $userobj->set_age(29);  

  59. $userobj->show();  

  60.   

  61. $probj = new Profession();  

  62. $probj->set_profession('IT SERVICE');  

  63. $probj->set_price(2500);  

  64. $probj->show();  

  65.   

  66. ?>  

__callStatic例子

[php] view plain copy

  1. <?php  

  2.   

  3. class Member{  

  4.   

  5.     protected static $memberdata = array();  

  6.   

  7.     public static function __callStatic($func$arguments){  

  8.   

  9.         list($type$name) = explode('_'$func);  

  10.           

  11.         if(!in_array($typearray('set','get')) || $name==''){  

  12.             return '';  

  13.         }  

  14.   

  15.         $feature = get_called_class();  

  16.   

  17.         switch($type){  

  18.             case 'set':  

  19.                 self::$memberdata[$feature][$name] = $arguments[0];  

  20.                 break;  

  21.   

  22.             case 'get':  

  23.                 return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : '';  

  24.                 break;  

  25.   

  26.             default:  

  27.         }  

  28.       

  29.     }  

  30.   

  31. }  

  32.   

  33.   

  34. class User extends Member{  

  35.   

  36.     public static function show(){  

  37.   

  38.         $feature = get_called_class();  

  39.   

  40.         if(self::$memberdata[$feature]){  

  41.             foreach(self::$memberdata[$featureas $key=>$member){  

  42.                 echo $key.':'.$member.'<br>';  

  43.             }  

  44.         }  

  45.     }  

  46.   

  47. }  

  48.   

  49.   

  50. class Profession extends Member{  

  51.   

  52.     public static function show(){  

  53.   

  54.         $feature = get_called_class();  

  55.   

  56.         if(self::$memberdata[$feature]){  

  57.             foreach(self::$memberdata[$featureas $key=>$member){  

  58.                 echo $key.':'.$member.'<br>';  

  59.             }  

  60.         }  

  61.     }  

  62.   

  63. }  

  64.   

  65. User::set_name('fdipzone');  

  66. User::set_age(29);  

  67. User::show();  

  68.   

  69. Profession::set_profession('IT SERVICE');  

  70. Profession::set_price(2500);  

  71. Profession::show();  

  72.   

  73. ?> 


请站长吃半碗泡面..