加入收藏 | 设为首页 | 会员中心 | 我要投稿 通辽站长网 (https://www.0475zz.com/)- 图像处理、建站、语音技术、AI行业应用、媒体智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php面向对象call处理错误调用窍门

发布时间:2023-10-26 11:02:10 所属栏目:PHP教程 来源:转载
导读:   在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用。上代码:



  在调用对象中不存在的方法时就会出现系统报错,然后程序退出不能继续执行。如果
  在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用。上代码:
 
  在调用对象中不存在的方法时就会出现系统报错,然后程序退出不能继续执行。如果在类中添加一个“魔术”方法__call(),则调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。可以通过在__call()方法中的设置,提示用户调用的方法及需要的参数列表内容不存在。__call()方法需要两个参数,第一个参数是调用不存在的方法时,接受这个不存在的方法的方法名,并将这个不存在的方法中,使用的参数列表形成数组传给__call()方法中的第二个参数。
 
  代码
 
   代码如下
 
  1  
 
  2     //这是一个测试的类,里面没有属性和方法
 
      class Test
 
      {
 
      }
 
  3
 
      //产生一个Test类的对象
 
  4     $test=new Test();
 
  5
 
      //调用对象里不存在的方法
 
  6     $test->demo("one", "two", "three");
 
  7
 
      //程序不会执行到这里
 
  8     echo "this is a test
 
  ";
 
  9
 
  ?>
 
  运行结果:Fatal error: Call to undefined method Test::demo()
 
  我们知道,程序的运行结果抛出了错误提示,在运行的过程中抛出错误后就已经中断了,以致”$Person->say();“这个正确的方法也不能再继续运行。看一下上面的代码就知道,Person类并没有代码错误,错就错在实例化Person类的过程中调用了Person类中并不存在的方法,如run()和eat()。
 
    在程序的运行中,出现如上抛出的的错误是致命性的,整个程序将崩溃。为了处理这种错误的同时让程序继续执行,我们可以在类中添加一个魔术方法__call,来调用对象中不存在的方法时自动调用该方法,并且使程序可以继续向下执行。
 
  下面将在上面的代码的基础上多添加一个__call方法并调试,代码如下:
 
  代码
 
   代码如下
 
  1  
 
  2     //这是一个测试的类,里面没有属性和方法
 
      class Test
 
      {
 
  3         //调用不存的方法时自动调用的方法,第一个参数为方法名,第二个参数是数组参数
 
  4         function __call($function_name, $args)
 
          {
 
  5             print "你所调用的函数:$function_name(参数:";
 
  6             print_r($args);
 
  7             echo "不存在!
 
  n";
 
  8         }
 
  9     }
 
  10
 
      //产生一个Test类的对象
 
  11     $test=new Test();
 
  12
 
      //调用对象里不存在的方法
 
  13     $test->demo("one", "two", "three");
 
  14
 
      //程序不会退出可以执行到这里
 
  15     echo "this is a test
 
  ";
 
  16 ?>
 
  17 运行结果:
 
  18 你所调用的函数:run(参数:Array ( [0] => teacher ) )不存在!
 
  19 你所调用的函数:eat(参数:Array ( [0] => child [1] => apple ) )不存在!
 
  20 Hello, wblog!
 
  这次程序的运行结果不再抛出致命性错误,在调用不存在的方法时自动调用了__call方法捕捉处理不存在的方法并提示给用户,而调用存在的方法时程序正常执行。
 
 

(编辑:通辽站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章