В чем разница между is_callable и function_exists в PHP?

Я работаю над проектом, в котором я использую устаревшую функцию из более старой версии. Но не хочу, чтобы мой скрипт был остановлен, если он использовался в старой версии. Поэтому я проверяю, существует ли функция и не создает ли ее снова.

Но в чем разница между function_exists и is_callable в php и какая из них лучше пользователю?

if(!is_callable('xyz')) {

  function xyz() {
    // code goes here
  }
}

ИЛИ

if(!function_exists('xyz')) {

  function xyz() {
    // code goes here
  }
}
43
задан Chetan Sharma 17 August 2010 в 06:08
поделиться

3 ответа

Функция is_callable принимает не только имена функций, но и другие типы обратных вызовов:

  • Foo::method
  • array("Foo", "method")
  • array($obj, "method")
  • Закрытия и другие вызываемые объекты (PHP 5. 3)

Итак, is_callable принимает все, что вы могли бы передать call_user_func и семейство, а function_exists только говорит, существует ли определенная функция (не методы, об этом см. method_exists и не закрытия).

Говоря иначе, is_callable является оберткой для zend_is_callable, который работает с переменными с псевдо-типом callback, в то время как function_exists только выполняет поиск по хэш-таблице в таблице функций.

54
ответ дан 26 November 2019 в 22:53
поделиться

При использовании с функцией (не методом класса) нет никакой разницы, за исключением того, что function_exists работает немного быстрее.

Но при использовании для проверки существования методов в классе вы не можете использовать function_exists . Вам нужно будет использовать is_callable или method_exists .

12
ответ дан 26 November 2019 в 22:53
поделиться

Если функция Plop существует, то function_exists("Plop") вернет true.

См. function_exists

Если переменная является вызываемой, то is_callable($var) вернет true.
Теперь это может означать, что $var - это имя функции.
Но я также могу быть именем объекта и метода.

См. is_callable

3
ответ дан 26 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: