PHP中的is_callable和function_exists到底有什么区别?

php
2022-08-30 10:53:30

我正在处理一个项目,其中我正在使用旧版本中已弃用的函数。但是,如果使用旧版本,则不希望我的脚本停止。

因此,我正在检查该函数是否存在,如果不存在,则创建它。

在 PHP 中 和 之间有什么区别,哪一个更好用?function_existsis_callable

if (!is_callable('xyz')) {
    function xyz() {
       // code goes here
    }
}

if(!function_exists('xyz')) {
    function xyz() {
      // code goes here
    }
}

答案 1

函数is_callable不仅接受函数名称,还接受其他类型的回调

  • Foo::method
  • array("Foo", "method")
  • array($obj, "method")
  • 闭包和其他可调用对象 (PHP 5.3)

因此,接受任何可以call_user_func和家族传递的东西,而function_exists只告诉某个函数是否存在(不是方法,请参阅method_exists,也不是闭包)。is_callable

换句话说,是zend_is_callable的包装器,它使用伪类型回调处理变量,同时仅在函数的表中进行哈希表查找is_callablefunction_exists


答案 2

当与函数(不是类方法)一起使用时,除了稍微快一点之外,没有区别。function_exists

但是,当用于检查类中方法是否存在时,您不能使用 。您必须使用 或 。function_existsis_callablemethod_exists


推荐