• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!
首页 > IT技术 > PHP > 内容

php面向对象之__call处理错误调用

2015-06-10 21:26:01   来源:叶景网络
    在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用。上代码:
    <?php
    class Person{        
    function say(){                                                
    echo "Hello, wblog!<br>";
    }        
    }
    $Person=new Person();            
    $Person->run("teacher");      //调用对象中不存在的方法run
    $Person->eat("child", "apple"); //调用对象中不存在的方法eat
    $Person->say();
    ?>
    运行结果:Fatal error: Call to undefined method Person::run()  on line 35
    我们知道,程序的运行结果抛出了错误提示,在运行的过程中抛出错误后就已经中断了,以致”$Person->say();“这个正确的方法也不能再继续运行。看一下上面的代码就知道,Person类并没有代码错误,错就错在实例化Person类的过程中调用了Person类中并不存在的方法,如run()和eat()。
    在程序的运行中,出现如上抛出的的错误是致命性的,整个程序将崩溃。为了处理这种错误的同时让程序继续执行,我们可以在类中添加一个魔术方法__call,来调用对象中不存在的方法时自动调用该方法,并且使程序可以继续向下执行。
    下面将在上面的代码的基础上多添加一个__call方法并调试,代码如下:
    <?php
    class Person{        
    function say(){ 
    echo "Hello, wblog!<br>";
    }         
    function __call($funName, $args) { //声明此方法用来处理调用对象中不存在的方法
    echo "你所调用的函数:".$funName."(参数:" ;  //输出调用不存在的方法名
    print_r($args); //输出调用不存在的方法时的参数列表
    echo ")不存在!<br>\n";                      
    }
    }
    $Person=new Person();          
    $Person->run("teacher"); //调用对象中不存在的方法,则自动调用了对象中的__call()方法
    $Person->eat("child", "apple");            
    $Person->say();
    ?>
    运行结果:
    你所调用的函数:run(参数:Array ( [0] => teacher ) )不存在!
    你所调用的函数:eat(参数:Array ( [0] => child [1] => apple ) )不存在!
    Hello, wblog!
    这次程序的运行结果不再抛出致命性错误,在调用不存在的方法时自动调用了__call方法捕捉处理不存在的方法并提示给用户,而调用存在的方法时程序正常执行。
    总结:在类中添加一个魔术方法__call,在调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
PHP通过soap调用.net接口asmx文件 PHP通过soap调用.ne
PHP开发环境配置 PHP开发环境配置
wamp集成环境的虚拟域名配置方法 wamp集成环境的虚拟
wamp独立安装配置 wamp独立安装配置
关注排行RANKING
1

PHP通过soap调用.net接口asmx文件

PHP通过soap调用.net接口asmx文件 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

PHP开发环境配置

PHP开发环境配置 下载PHP安装程序,并解压缩。(下载页面为http: www php net downloads php,下...

3

wamp集成环境的虚拟域名配置方法

wamp集成环境的虚拟域名配置方法 最近,发现身边很多人用wamp集成环境,这个虽然比较快捷,一步到位,但是只能访...

4

wamp独立安装配置

wamp独立安装配置 apache 中的 httpd conf LoadModule php5_module "D: lamp php5 php5apache2_2 dll " 加载模块并开启

5

php 获取今天明天昨天时间戳

php 获取今天明天昨天时间戳 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

6

PHP获取服务器信息 MySql版本和浏览器信息

PHP获取服务器信息 MySql版本和浏览器信息 1、$_SESSION[ PHP_SELF ] -- 获取当前正在执行脚本的文件名 2...

7

smarty 截取字符串函数 truncate的用法

smarty 截取字符串函数 truncate的用法 smarty truncate 截取字符串,从字符串开始处截取某长度的字符,默认的长度为8...

8

php编程常用函数方法等

php编程常用函数方法等 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站...

9

如何让ThinkPHP的模板引擎达到最佳效率

如何让ThinkPHP的模板引擎达到最佳效率 默认情况下ThinkPHP框架系统默认使用的模板引擎是内置模板引擎。内置模板引擎支持模板文...