php5面向对象中类的__call()方法的一些小介绍
标签:__call() php5面向对象 自动调用方法 处理调用错误 点击7759次 时间:2011-08-16
最近不少php初学者问我__call()是神马东东,说在手册中没有发现这个函数,在这里我告诉大家__call()是php面向对象中而产生的自动调用的方法而不是函数,他是存活于类当中的用于处理调用错误,也行你会问他到底怎么处理调用错误呢?来自:php开源框架

  最近不少php初学者问我__call()是神马东东,说在手册中没有发现这个函数,在这里我告诉大家__call()是php面向对象中而产生的自动调用的方法而不是函数,他是存活于类当中的用于处理调用错误,也行你会问他到底怎么处理调用错误呢?怎么样使用他呢,请不要着急,我慢慢给大家讲解。
    比如在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行。那么可不可以在程序调用对象内部不存在的方法时候,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这时候我们就要使用在调用不存在的方法时自动调用的方法”__call()”
   下面我来给大家分别举出两个
例子1.当类中不加__call()方法时是情况
<?php
//这是一个测试的类,里面没有属性和方法
  class Test
  {


  }

//产生一个Test类的对象
   $test = new Test();

//KPHP类中调不存在的tinking()方法
   $test->tinking("张三", "我要学习kphp");

//程序不会执行到这里
   echo "我是kphp开源框架将不会输出<br>";

?>

例子1会产生一个错误提示Test类中无tinking()方法,而下面echo也不会输出,如何可以让程序继续执行下去呢,而不报错误呢,这时就需要在Test类中加入自动调用方法__call()处理调用错误,这个方法有2个参数,第一个参数为调用不存在的方法的名字,第二个参数则是把这个不存在的方法的多个参数以数组的形式传进来,即一个不存在方法的参数组成的数组

例子2.__call()方法的应用

<?php
//这是一个测试的类,里面没有属性和方法
class Test
{
 //调用不存的方法时自动调用的方法,第一个参数为方法名,第二个方法参数组成的数组参数
     function __call($function_name, $args)
     { 
          echo "你所调用的函数:$function_name"." 参数的数组:"; 
          print_r($args); 
          echo "不存在!<br>\n";
      }
}

//产生一个Test类的对象
   $test = new Test();

//KPHP类中调不存在的tinking()方法
   $test->tinking("张三", "我要学习kphp");

//程序不会退出可以执行到这里
   echo "我是kphp开源框架<br>";
?>
输出内容:thinking  参数的数组: Array ( [0] => 张三 [1] => 我要学习kphp )不存在
我是kphp开源框架

   通过例子2我们可以看出__call()方法是用于处理调用错误,他的存在是为了让程序能够继续执行,或是捕获错误信息,而不至于出错导致程序停止,有很多开源框架利用__call()方法的特性去加载相关的类库,以达到自动加载的目的,方法掌握了,如何合理的应用就要看大家的项目需要了。这里就不多做介绍了

最新动态

学习指南:

知识总结: