alias — список всех псевдонимов PHP

В PHP вы можете определить псевдоним класса, используя class_alias функция. Есть ли способ получить список всех псевдонимов классов, определенных в данный момент во время выполнения?

6

Решение

Как показывает hek2mgl, это невозможно в PHP. В зависимости от Зачем Вы хотите, чтобы это могло быть жизнеспособные обходные пути все же.

Я предполагаю, что сейчас вы пытаетесь обнаружить псевдонимы, созданные в стороннем коде. Вы могли бы тогда установить модуль Runkit, задавать runkit.internal_override в 1 чтобы включить модификацию встроенной функции, и сделайте что-то подобное в корневом файле вашего проекта:

runkit_function_rename('class_alias', 'class_alias_internal');
function class_alias($original, $alias, $autoload = TRUE)
{
Logsomewhere("Creating alias from $original to $alias!");
class_alias_internal($original, $alias, $autoload);
}

Конечно, это также означает, что вы можете составить именно тот список, который вы ищете. Я не вижу возможности использовать эту функциональность во время выполнения (поправьте меня, если я ошибаюсь), поэтому вам придется делать это на сервере разработки столько времени, сколько потребуется. Поскольку Runkit — довольно опасный модуль, я бы даже отключил его на devserver, как только вы закончите с ним.

Для других сценариев подобные обходные пути могут быть жизнеспособными, но мне нужно знать, почему вы ищете эту информацию. Что касается PHP, псевдоним предполагаемый быть необнаружимым, поэтому он отлично справляется со своей задачей (для разнообразия).

4

Другие решения

Посмотрел исходный код PHP. После того, как псевдоним был зарегистрирован, PHP не знает о том, что является оригиналом и что такое псевдоним. Как жесткая ссылка в файловой системе. Вы можете просмотреть код в его последней версии здесь: https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728

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

Тем не менее, функция, которая показывает записи таблицы классов, имеющие более одной именованной ссылки на нее, может быть создана (в ядре PHP, с C), но, похоже, в данный момент она недоступна.

4