call_user_func定义中的静态调用是什么意思

时间:2012-03-11 13:32:16

标签: php callback

我无法理解call_user_func的PHP手册,尤其是参数说明:

  

要调用的函数。通过将array($classname, $methodname)传递给此参数,类方法也可以使用此函数 静态调用

示例:使用类方法

<?php
class myclass {
   function say_hello()
   {
       echo "Hello!\n";
   }
}

$classname = "myclass";

call_user_func(array($classname, 'say_hello'));
?>

另外请解释一下这段代码“call_user_func(array($ classname,'say_hello'))”。当然array($classname, 'say_hello')不是方法名称。

1 个答案:

答案 0 :(得分:1)

将数组传递给call_user_func是调用类方法(静态和非静态)的特殊情况。在您给出的示例中,您可以执行此操作:

<?php
class myclass {
   public function say_hello()
   {
       echo "Hello!\n";
   }

   public static function say_hello_static() {
       echo "Hello static!\n";
   }
}

//Call static method
call_user_func(array('myclass','say_hello_static'));

//Call object method
$myobject = new myclass();
call_user_func(array($myobject,'say_hello'));
?>

从PHP 5.2.3开始,您可以使用字符串而不是数组来调用静态方法,例如:

call_user_func('myclass::say_hello_static');