Php call_user_func()和$var()之间有区别吗?

Php call_user_func()和$var()之间有区别吗?,php,Php,call\u user\u func()和它的语法版本之间有什么区别吗 // Global function $a = 'max'; echo call_user_func($a, 1, 2); // 2 echo $a(1, 2); // 2 // Class method class A { public function b() { return __CLASS__; } static function c() { return 'I a

call\u user\u func()
和它的语法版本之间有什么区别吗

// Global function

$a = 'max';

echo call_user_func($a, 1, 2); // 2
echo $a(1, 2); // 2

// Class method

class A {

   public function b() {
     return __CLASS__;
   }

   static function c() {
      return 'I am static!';
   }

}

$a = new A;
$b = 'b';

echo call_user_func(array($a, $b)); // A
echo $a->$b(); // A

// Static class method

$c = 'c';

echo call_user_func(array('A', $c)); // I am static!
echo a::$c(); // I am static!

两个输出相同,但我认为(仅10k+rep)它们不相等


那么,有什么区别吗?

我能想到的第一个区别是
call\u user\u func()
作为回调运行
方法

这意味着您可以使用闭包,例如

echo call_user_func(function($a, $b) {
    return max($a, $b);
}, 1, 2);

不过,与使用或性能(执行)相比,这在实现上的差异更大。

老实说,我找不到两者之间有多大的差异。它们基本上做相同的事情,但我能找到的唯一区别是
call\u user\u func
比变量函数(调用空函数)花费2倍多的时间来完成

另一件事是错误处理程序不同,如果使用不存在的回调函数,变量函数将输出致命错误并停止脚本,而
call\u user\u func
将输出警告但继续脚本

此外,当通过函数传递参数时,使用变量函数可以提供与行号相关的错误的更多细节:

function asdf($a, $b) {
  return(1);
}
调用用户函数('asdf',1)

警告:asdf()缺少参数2 在第3行的G:\test.php中

-

$a='asdf'$a($a,1)

警告:缺少的参数2 asdf(),在第行的G:\test.php中调用 10,并在第3行的G:\test.php中定义

这些错误是从命令行界面(CLI)测试中收集的,错误的显示显然取决于您的配置。

Pfft,“仅10k+rep”。别吹牛了;)