php __call、__set 和 __get的用法介绍

发布时间:2019-12-28编辑:脚本学堂
本文介绍php中__call、__set 和 __get的用法,通过具体的例子进行讲解,有需要的朋友,可以参考学习下。

1、__call的用法
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
 
例:__call
 

复制代码 代码示例:
<?php 
    class foo { 
        function __call($name,$arguments) { 
            print("Did you call me? I'm $name!<br>"); 
            print_r($arguments); 
            print("<br><br>"); 
        } 
     
        function doSecond($arguments) 
        { 
            print("Right, $arguments!<br>"); 
        } 
    }  
      
    $test = new foo(); 
    $test->doFirst('no this function'); 
    $test->doSecond('this function exist'); 
?> 

__call 实现“过载”动作
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。

例:使用 __call 实现“过载”动作
 

复制代码 代码示例:
<?php 
    class Magic { 
        function __call($name,$arguments) { 
            if($name=='foo') { 
                if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); 
                if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); 
            } 
        }    
         
        private function foo_for_int($x) { 
            print("oh an int!"); 
        }     
      //by www.jb200.com
              
        private function foo_for_string($x) { 
            print("oh a string!"); 
        } 
    }  
     
    $test = new Magic(); 
    $test->foo(3); 
    $test->foo("3"); 
?> 

2、__set 和 __get的用法
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
例: __set 和 __get
 

复制代码 代码示例:
<?php 
    class foo { 
        function __set($name,$val) { 
            print("Hello, you tried to put $val in $name<br>"); 
        } 
      
        function __get($name) { 
            print("Hey you asked for $name<br>"); 
        } 
    } 
     
    $test = new foo(); 
    $test->__set('name','justcoding'); 
    $test->__get('name'); 
?>

php编程中,尤其是php面向对象编程中,灵活应用__call、__set 和 __get,可以收到意外的惊喜,建议大家牢固掌握。