美文网首页
PHP 中__call()的使用方法

PHP 中__call()的使用方法

作者: 知码客 | 来源:发表于2021-09-10 16:49 被阅读0次

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

    1.__call的使用

    class foo {
    
    function __call($name,$arguments) {
    
    print("Did you call me? I'm $name!");
    
    }
    
    } $x = new foo();
    
    $x->doStuff();
    
    $x->fancy_stuff(); 
    

    2.使用 __call 实现“过载”动作

    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!");
    
    } private function foo_for_string($x) {
    
    print("oh a string!");
    
    }
    
    } $x = new Magic();
    
    $x->foo(3);
    
    $x->foo("3"); 
    

    3._call和___callStatic这两个函数是php类 的默认函数,

    __call() 在一个对象的上下文中,如果调用的方法不能访问,它将被触发

    __callStatic() 在一个静态的上下文中,如果调用的方法不能访问,它将被触发

    abstract class Obj
    
    {
    
    protected $property = array();
    
    
    
    abstract protected function show();
    
    
    
    public function __call($name,$value)
    
    {
    
    if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array))
    
    {
    
    $this->property[$array[1]] = $value[0];
    
    return;
    
    }
    
    elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array))
    
    {
    
    return $this->property[$array[1]];
    
    }
    
    else
    
    {
    
    exit("
    ;Bad function name '$name' ");
    
    }
    
    
    
    }
    
    }
    
    
    
    class User extends Obj
    
    {
    
    public function show()
    
    {
    
    print ("Username: ".$this->property['Username']."
    ;");
    
    //print ("Username: ".$this->getUsername()."
    ;");
    
    print ("Sex: ".$this->property['Sex']."
    ;");
    
    print ("Age: ".$this->property['Age']."
    ;");
    
    }
    
    }
    
    
    
    class Car extends Obj
    
    {
    
    public function show()
    
    {
    
    print ("Model: ".$this->property['Model']."
    ;");
    
    print ("Sum: ".$this->property['Number'] * $this ->property['Price']."
    ;");
    
    }
    
    }
    
    
    
    $user = new User;
    
    $user ->setUsername("Anny");
    
    $user ->setSex("girl");
    
    $user ->setAge(20);
    
    $user ->show();
    
    print("\<br/>"); 
    
    $car = new Car;
    
    $car ->setModel("BW600");
    
    $car ->setNumber(5);
    
    $car ->setPrice(40000);
    
    $car ->show(); 
    

    总结:

    __call()函数是php类的默认魔法函数,__call() 在一个对象的上下文中,如果调用的方法不存在的时候,它将被触发。

    相关文章

      网友评论

          本文标题:PHP 中__call()的使用方法

          本文链接:https://www.haomeiwen.com/subject/isqnwltx.html