• php __call 与 __callStatic


    php __call 与 __callStatic

     

    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($type, array('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($type, array('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[$feature] as $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[$feature] as $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. ?> 
  • 相关阅读:
    linux下安装nginx
    阿里云CentOS系统配置iptables防火墙
    没用私服,自己安装下本地jar包,制作坐标
    Redis加入Centos Linux开机启动
    CentOS6.5安装redis(3.0.3)
    Spring Boot 第一个demo
    JDK下载与安装
    IDEA-Maven下载及安装
    项目注意:
    idea项目Tomcat 插件 运行报错
  • 原文地址:https://www.cnblogs.com/shsgl/p/3983119.html
Copyright © 2020-2023  润新知