`
afeix
  • 浏览: 12907 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

php __call 与 __callStatic

    博客分类:
  • PHP
 
阅读更多

转自:http://blog.csdn.net/fdipzone/article/details/8581125

 

php 5.3 后新增了 __call 与__callStatic 魔法方法。

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

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

 

__call($funcname, $arguments)

__callStatic($funcname, $arguments)


参数说明:

$funcname String 调用的方法名称。

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

 

__call 例子

 

  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例子

 

  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. ?>  
分享到:
评论

相关推荐

    PHP魔术方法之__call与__callStatic使用方法

    主要介绍了PHP魔术方法之__call与__callStatic方法,需要的朋友可以参考下

    php常见的魔术方法详解

    PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload  1、__get、__set  这两个方法是为在...

    php 魔术函数使用说明

    总的来说, 有下面几个魔术函数 __construct() __destruct() __get() __set() __isset() __unset() __call() __callStatic() __sleep() __wakeup() __toString() __set_state() __clone() __autoload() __construct...

    PHP中常用的魔术方法

    __construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic; 1,__constuct()构造函数 通常实例化完一个对象之后,都要对该对象的属性...

    PHP魔术方法的使用示例

    主要介绍了PHP魔术方法的使用示例,本文分别讲解了__get、__set、__call、__callStatic、__toString、 __invoke等魔术方法的使用,需要的朋友可以参考下

    详解php魔术方法(Magic methods)的使用方法

    PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用...

    那些年我们错过的魔术方法(Magic Methods)

    比如: __construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等方法在 PHP 中被称为...

    PHP之十六个魔术方法详细介绍

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不...

    PHP类中的魔术方法(Magic Method)简明总结

    主要介绍了PHP类中的魔术方法(Magic Method)简明总结,这些方法包括__construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__toString()等,需要的朋友可以参考下

    supports:使用arraylogconfigguzzle等处理

    技术支持 用array / config / log / guzzle等处理 关于日志 use Yansongda \ Supports \ Logger as ... public static function __callStatic ( string $ method , array $ args ) { return call_user_func_array

Global site tag (gtag.js) - Google Analytics