首页> 基础笔记 >PHP基础学习 >面向对象 面向对象

PHP面向对象通过__call( )方法处理错误调用

作者:小萝卜 2019-09-03 浏览 862

简介当试图调用一个对象中不存在的方法时,就会产生错误。PHP提供了“__call()”这个方法来处理这种情况。即当调用一个不可访问方法(如未定义,或者不可见)时,__call()会被调用。

PHP面向对象通过__call( )方法处理错误调用

当试图调用一个对象中不存在的方法时,就会产生错误。PHP提供了“__call()”这个方法来处理这种情况。即当调用一个不可访问方法(如未定义,或者不可见)时,__call()会被调用。

格式:
mixed __call( string $name , array $arguments )

说明:
第一个参数$name表示方法名,
第二参数$arguments表示调用时的参数列表(数组类型)

实例1:

<?php
    //声明一个测试类,在类中声明printHello()和__call()方法
    class TestClass {                   
        public function printHello() {         //声明一个方法,可以让对象能成功调用
            echo "Hello<br>";           //执行时输出一条语句
        }
        /**
            声明魔术方法__call(),用来处理调用对象中不存在的方法
            @param  string  $functionName   访问不存的成员方法名称字符串
            @param  array   $args       访问不存的成员方法中传递的参数数组
        */
        public function __call($functionName, $args) {         
            echo "你所调用的函数:".$functionName."(参数:";      //输出调用不存在的方法名
            print_r($args);                                   //输出调用不存在的方法时的参数列表
            echo ")不存在!<br>\n";                   //输出附加的一些提示信息
        }   
    }
    $obj = new TestClass();             //通过类TestClass实例化一个对象
    $obj -> myFun("one", 2, "three");   //调用对象中不存在方法,则自动调用了对象中__call()方法
    $obj -> otherFun(8,9);              //调用对象中不存在的方法,则自动调用了对象中__call()方法
    $obj -> printHello();                  //调用对象中存在的方法,可以成功调用

实例2:

<?php
//魔术方法__call()的使用

class Demo{
    public function fun1(){
        echo "fun1()....<br/>";
    }
    
    public function fun2(){
        echo "fun2()....<br/>";
    }
    
    //魔术方法
    public function __call($method,$params){
        //echo "aaaa";
        echo "你调用的方法{$method}不存在!<br/>";
        echo "参数:";
        print_r($params);
    }
}

//测试
$demo = new Demo();

$demo->fun1();
$demo->fun2();

//当调用一个不存在的方法时,会先尝试调用当前对象中的魔术方法__call()
$demo->fun3(10,20);

 

很赞哦! (0)

文章评论

    高端网站建设