php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > php面向对象__call处理错误调用技巧 - php面向对象

php面向对象__call处理错误调用技巧 - php面向对象

分享到:
【字体:
导读:
          在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用 在调用对象中不存在的方法时就会出现系统报错,然后程序退...

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

在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.在调用对象中不存在的方法时就会出现系统报错,然后程序退出不能继续执行。如果在类中添加一个“魔术”方法__call(),则调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。

可以通过在__call()方法中的设置,提示用户调用的方法及需要的参数列表内容不存在。__call()方法需要两个参数,第一个参数是调用不存在的方法时,接受这个不存在的方法的方法名,并将这个不存在的方法中,使用的参数列表形成数组传给__call()方法中的第二个参数。

实例代码如下:

  1.     //这是一个测试的类,里面没有属性和方法  
  2.     class Test  
  3.     {  
  4.     } 
  5.  
  6.     //产生一个Test类的对象 
  7.     $test=new Test(); 
  8.  
  9.     //调用对象里不存在的方法 
  10.     $test->demo("one""two""three"); 
  11.  
  12.     //程序不会执行到这里 
  13.     echo "this is a test
    "
  14.  
  15. ?> 

运行结果:Fatal error: Call to undefined method Test::demo()

我们知道,程序的运行结果抛出了错误提示,在运行的过程中抛出错误后就已经中断了,以致”$Person->say();“这个正确的方法也不能再继续运行。看一下上面的代码就知道,Person类并没有代码错误,错就错在实例化Person类的过程中调用了Person类中并不存在的方法,如run()和eat()。

在程序的运行中,出现如上抛出的的错误是致命性的,整个程序将崩溃。为了处理这种错误的同时让程序继续执行,我们可以在类中添加一个魔术方法__call,来调用对象中不存在的方法时自动调用该方法,并且使程序可以继续向下执行。

下面将在上面的代码的基础上多添加一个__call方法并调试,实例代码如下:

  1.     //这是一个测试的类,里面没有属性和方法  
  2.     class Test  
  3.     { 
  4.         //调用不存的方法时自动调用的方法,第一个参数为方法名,第二个参数是数组参数 
  5.         function __call($function_name$args)  
  6.         {  
  7.             print "你所调用的函数:$function_name(参数:";  
  8.             print_r($args);  
  9.             echo "不存在!
    n"
  10.         } 
  11.     } 
  12.  
  13.     //产生一个Test类的对象 
  14.     $test=new Test(); 
  15.  
  16.     //调用对象里不存在的方法 
  17.     $test->demo("one""two""three"); 
  18.  
  19.     //程序不会退出可以执行到这里 
  20.     echo "this is a test
    "
  21. ?> 

运行结果:

你所调用的函数:run(参数:Array ( [0] => teacher ) )不存在!

你所调用的函数:eat(参数:Array ( [0] => child [1] => apple ) )不存在!

Hello, wblog!

这次程序的运行结果不再抛出致命性错误,在调用不存在的方法时自动调用了__call方法捕捉处理不存在的方法并提示给用户,而调用存在的方法时程序正常执行。

总结:在类中添加一个魔术方法__call,在调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。

分享到:
php面向对象__toString() 用法详解 - php...
php面向对象__toString() 用法详解 本文章来给各位同学介绍一下关于php面向对象__toString() 用法详解,__toString() 方法是自动被调用的,是在直接输出对象引用时自动调用的. 我们前面说过在类里面声明“--”开始的方法名的方法(PHP给我们提供的),都是在某一时刻不同情况下自动调用执行的...
php自动加载类__autoload()的方法 - php...
php自动加载类__autoload()的方法 作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部文件包含进来。但是,当要用的外部类很多后,就会发现用包含函数会显得十分的繁琐,这是就可以用__autoload()全局函数自动加载类。 当在index.php中要使用前面三个类...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……