Function exists: примеры (PHP)
function_exists(string $function): boolОсновные сведения о function_exists
Функция function_exists() проверяет, существует ли указанная функция в текущей среде выполнения PHP. Она определяет, была ли функция объявлена или встроена в ядро языка.
Функция применяется для проверки доступности функций перед их вызовом. Это полезно при работе с опциональными расширениями, для обеспечения обратной совместимости или при динамическом вызове функций, которые могут быть неопределены.
Функция принимает один обязательный параметр:
- $function_name (string) - имя проверяемой функции в виде строки. Чувствительно к регистру, за исключением встроенных конструкций языка.
Возвращаемое значение: true, если функция с указанным именем существует, false - в противном случае.
Примеры использования function_exists
<?
if (function_exists('str_replace')) {
echo 'Функция str_replace доступна';
} else {
echo 'Функция str_replace отсутствует';
}
?>Функция str_replace доступна
<?
if (!function_exists('my_custom_function')) {
function my_custom_function() {
return 'Функция определена';
}
}
echo my_custom_function();
?>Функция определена
<?
// Встроенные функции нечувствительны к регистру при проверке
var_dump(function_exists('PRINT_R'));
var_dump(function_exists('Print_R'));
// Пользовательские функции чувствительны к регистру
function myFunc() {}
var_dump(function_exists('myfunc'));
var_dump(function_exists('myFunc'));
?>bool(true) bool(true) bool(false) bool(true)
Альтернативные функции в PHP
Проверяет существование метода в классе. Принимает объект или имя класса и имя метода. Возвращает true, если метод существует, даже если он недоступен из-за модификаторов доступа.
Проверяет, может ли значение быть вызвано как функция. Проверяет не только существование функции, но и корректность синтаксиса вызова. Может проверять массивы для вызова методов и замыкания.
function_exists() используется для проверки именно функций. method_exists() предназначен для методов классов. is_callable() имеет более широкое применение и проверяет возможность вызова, включая проверку доступности метода.
Аналоги в других языках программирования
Function exists в Python
В Python используется функция callable() или проверка через hasattr() с модулем:
import math
# Способ 1
print(callable(math.sqrt)) # True
# Способ 2
try:
math.sqrt
print('Функция существует')
except AttributeError:
print('Функция отсутствует')True Функция существует
Function exists в Javascript
В JavaScript проверяют тип значения или используют оператор typeof:
// Проверка встроенной функции
console.log(typeof console.log === 'function');
// Проверка пользовательской функции
function myFunc() {}
console.log(typeof myFunc === 'function');
// Проверка несуществующей функции
console.log(typeof nonExistent === 'function');true true false
Function exists в MySQL
В MySQL нет прямой аналогии, но можно проверять наличие функций через системные таблицы:
SELECT name FROM mysql.proc
WHERE db = DATABASE() AND type = 'FUNCTION';
-- Или для встроенных функций проверяем документациюТипичные ошибки
<?
// Неправильно - интерпретируется как константа
if (function_exists(str_replace)) {
echo 'Проверка';
}
?>Warning: Use of undefined constant str_replace - assumed 'str_replace'
<?
$func = function() { return 'test'; };
var_dump(function_exists('$func'));
var_dump(function_exists('func'));
?>bool(false) bool(false)
<?
if (!function_exists('calculate')) {
function calculate($a, $b) {
return $a + $b;
}
}
// Повторное объявление без проверки вызовет ошибку
function calculate($a, $b) {
return $a * $b;
}
?>Fatal error: Cannot redeclare calculate()
Изменения в версиях PHP
Функция стала возвращать true для встроенных языковых конструкций (echo, print, isset и др.), хотя они не являются функциями в строгом смысле. Ранее возвращалось false.
Улучшена обработка встроенных функций. Функция стала более последовательной в проверке различных типов встроенных конструкций.
Расширенные примеры использования
<?
// Выбор функции в зависимости от доступности расширения
if (function_exists('mb_strtolower')) {
function strtolower_unicode($str) {
return mb_strtolower($str, 'UTF-8');
}
} else {
function strtolower_unicode($str) {
return strtolower($str);
}
}
echo strtolower_unicode('ПРИВЕТ МИР');
?>привет мир
<?
// Загрузка функций из модулей
$modules = ['image', 'cache', 'auth'];
foreach ($modules as $module) {
$function_name = $module . '_init';
if (function_exists($function_name)) {
call_user_func($function_name);
echo "Модуль $module инициализирован\n";
}
}
function cache_init() {
// Инициализация кэша
}
?>Модуль cache инициализирован
<?
namespace MyProject;
function customHelper() {
return 'Helper function';
}
// Проверка с полным именем
var_dump(function_exists('MyProject\\customHelper'));
// Проверка из глобального пространства
var_dump(function_exists('MyProject\\customHelper'));
?>bool(true) bool(true)
<?
// Автоматическая загрузка функций при первом вызове
spl_autoload_register(function ($func_name) {
$file = __DIR__ . '/functions/' . $func_name . '.php';
if (file_exists($file)) {
require_once $file;
}
});
// При вызове несуществующей функции попытается загрузить
if (!function_exists('special_calculation')) {
// Функция может быть загружена через autoload
echo 'Функция не загружена';
}
?>