Get extension funcs: примеры (PHP)
get_extension_funcs(string $extension): array|falseОписание функции get_extension_funcs
Функция get_extension_funcs в PHP возвращает перечень всех функций, которые предоставляет указанное расширение. Она применяется для анализа доступных возможностей среды выполнения, отладки и создания диагностических инструментов.
array|false get_extension_funcs(string $extension_name)
Единственный параметр extension_name принимает строковое значение с именем расширения. Имя должно передаваться в том же формате, в котором оно появляется в выводе функции phpinfo().
При успешном выполнении функция возвращает индексированный массив, содержащий имена всех функций указанного расширения. Если расширение не существует или не предоставляет функций, возвращается значение false.
Простые примеры использования
Запрос списка функций из расширения JSON:
$funcs = get_extension_funcs(\"json\"); print_r($funcs);
Array
(
[0] => json_encode
[1] => json_decode
[2] => json_last_error
[3] => json_last_error_msg
)$result = get_extension_funcs(\"imaginary_extension\"); var_dump($result);
bool(false)
// Пример с расширением, которое может не иметь функций $result = get_extension_funcs(\"Core\"); var_dump($result);
bool(false)
Похожие функции в PHP
Функция возвращает массив со всеми загруженными в текущий момент расширениями. Она полезна для предварительного анализа среды перед использованием get_extension_funcs.
print_r(get_loaded_extensions());
Проверяет, загружено ли конкретное расширение. Эта функция оптимальна для простой проверки доступности расширения без получения полного списка его функций.
if (extension_loaded(\"mbstring\")) {
echo \"Расширение mbstring активно\";
}Возвращает многомерный массив всех определенных функций, сгруппированных по категориям (внутренние и пользовательские). Она предоставляет более общую картину, но не привязана к конкретным расширениям.
$allFuncs = get_defined_functions(); print_r($allFuncs[\"internal\"][0]);
Аналоги в других языках программирования
В Python для интроспекции модулей используется модуль inspect, который позволяет получать информацию о составе модуля.
import inspect import json members = inspect.getmembers(json, inspect.isfunction) print([name for name, _ in members])
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', 'dump', 'dumps', 'load', 'loads']
В среде Node.js можно получить экспортируемые функции модуля через Object.keys, но это работает только для CommonJS модулей.
const fs = require('fs');
console.log(Object.keys(fs).filter(k => typeof fs[k] === 'function'));В MySQL существует команда для отображения пользовательских функций, но она не показывает встроенные функции СУБД.
SHOW FUNCTION STATUS WHERE Db = DATABASE();
Типичные ошибки
Имя расширения должно передаваться без пробелов и в правильном регистре, как оно отображается в phpinfo().
// Неправильно: использование некорректного имени $funcs = get_extension_funcs(\"JSON\"); // должно быть \"json\" var_dump($funcs);
bool(false)
Распространенная ошибка - предположение, что функция всегда возвращает массив.
$funcs = get_extension_funcs(\"unknown\");
// Ошибка при попытке использовать false как массив
foreach ($funcs as $func) {
echo $func;
}Warning: Invalid argument supplied for foreach()
Некоторые расширения, такие как Core, могут не возвращать функций, что приводит к неожиданному false.
$coreFuncs = get_extension_funcs(\"Core\");
if ($coreFuncs === false) {
echo \"Расширение Core не предоставляет функций через этот метод\";
}Изменения в версиях PHP
В PHP 8.0 не было внесено существенных изменений в работу функции get_extension_funcs. Функция сохраняет обратную совместимость с предыдущими версиями.
В PHP 8.1 улучшена согласованность возвращаемых типов, но сигнатура функции осталась прежней. Возвращаемый тип явно указан как array|false в документации.
В ранних версиях PHP (до 5.3) функция могла вести себя менее предсказуемо с некоторыми встроенными расширениями. В современных версиях поведение стандартизировано.
Расширенные примеры применения
$loaded = get_loaded_extensions();
$reference = [];
foreach ($loaded as $ext) {
$funcs = get_extension_funcs($ext);
if (is_array($funcs)) {
$reference[$ext] = $funcs;
}
}
// Вывод структурированного справочника
foreach ($reference as $ext => $funcs) {
echo \"{$ext} (\" . count($funcs) . \" функций)\";
echo \"\" . implode(\", \", $funcs) . \"
\";
}function is_function_available($function_name) {
$loaded = get_loaded_extensions();
foreach ($loaded as $ext) {
$funcs = get_extension_funcs($ext);
if (is_array($funcs) && in_array($function_name, $funcs)) {
return true;
}
}
return false;
}
// Проверка перед использованием
if (is_function_available(\"imagecreatefrompng\")) {
echo \"Графические функции GD доступны\";
} else {
echo \"Расширение GD не установлено или отключено\";
}// Симуляция сравнения доступных функций в разных конфигурациях
$prodExtensions = ['json', 'mbstring', 'pdo'];
$devExtensions = ['json', 'mbstring', 'pdo', 'xdebug', 'opcache'];
$missingInProd = [];
foreach ($devExtensions as $ext) {
if (!in_array($ext, $prodExtensions)) {
$funcs = get_extension_funcs($ext);
if (is_array($funcs)) {
$missingInProd[$ext] = $funcs;
}
}
}
print_r($missingInProd);// Генерация Markdown-документации по доступным функциям
$output = \"# Доступные функции PHP\n\n\";
foreach (get_loaded_extensions() as $ext) {
$funcs = get_extension_funcs($ext);
if (is_array($funcs) && count($funcs) > 0) {
$output .= \"## Расширение {$ext}\n\n\";
foreach ($funcs as $func) {
$output .= \"- `{$func}`\n\";
}
$output .= \"\n\";
}
}
file_put_contents('php_functions.md', $output);