Get extension funcs: примеры (PHP)

Получение функций расширения через 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 активно\";
}
get_defined_functions

Возвращает многомерный массив всех определенных функций, сгруппированных по категориям (внутренние и пользовательские). Она предоставляет более общую картину, но не привязана к конкретным расширениям.

$allFuncs = get_defined_functions();
print_r($allFuncs[\"internal\"][0]);

Аналоги в других языках программирования

Python: inspect.getmembers

В 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']
JavaScript: Object.keys

В среде Node.js можно получить экспортируемые функции модуля через Object.keys, но это работает только для CommonJS модулей.

const fs = require('fs');
console.log(Object.keys(fs).filter(k => typeof fs[k] === 'function'));
MySQL: SHOW FUNCTION STATUS

В 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()
Путаница с расширениями Zend

Некоторые расширения, такие как Core, могут не возвращать функций, что приводит к неожиданному false.

$coreFuncs = get_extension_funcs(\"Core\");
if ($coreFuncs === false) {
    echo \"Расширение Core не предоставляет функций через этот метод\";
}

Изменения в версиях PHP

PHP 8.0 и выше

В 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);

PHP get_extension_funcs function comments

En
Get extension funcs Returns an array with the names of the functions of a module