Вопрос
Есть ли способ заставить PHP игнорировать повторные объявления классов вместо того, чтобы сгладить FATAL ERROR?Или, по крайней мере, выдать исключение? (тогда я мог бы легко его перехватить и продолжить (а также журнал попыток автозагрузки).)
Я предполагаю, что нет, а фатальная ошибка - фатальная ошибка -в конце концов, в девяноста девяти из ста случаев это разумно разумное поведение - и мне, вероятно, придется просто зафиксировать случаи его запуска в каждом конкретном случае.Но, может быть, кто-то умнее меня понял это.
Если вы спрашиваете себя " С какой стати вы хотите это сделать? ", читайте дальше.
Справочная информация
Я работаю над инструментом, который использует Отражение для сбора конкретной информации об используемых функциях и классах.Одним из аргументов сценария является необязательный файл начальной загрузки, который делает Reflection более надежным с автозагрузкой (меньше ReflectionExceptions
, которые в конечном итоге попадают в ловушку и запускают эвристику отката, поскольку классы неизвестны в конкретном файле).
Теперь, при начальной загрузке автозагрузчик (и) работает нормально, и скрипт запускается, как и предполагалось, без каких-либо жалоб перемещается по нескольким сотням файлов, пока я не наткнулся на загвоздку:
Неустранимая ошибка PHP: Невозможно переопределить класс PHPUnit_Framework_Constraint в /usr/share/php/PHPUnit/Framework/Constraint.php в строке 62
У меня есть две проблемы:
Во-первых, я понятия не имею, чтовызывает это.Я настроил используемый загрузчик, но чередуюсь только между «Cannot redeclare» и «Could not open file», в зависимости от используемого пути включения.Здесь нет среднего уровня, то есть нет точки, где не возникает ошибка.Тем не менее, я все еще расследую.(Однако вопрос не в том, о чем вопрос.)
Два, что более важно, и ведущие к предмету этого вопроса, Мне нужен способ, чтобы уловить его .Я пытался написать собственный обработчик ошибок, но, похоже, он не хочет работать в течение Fatal error
s (несколько разумно, можно поспорить).
Я собираюсь выпустить этот инструмент в открытый исходный кодмир в какой-то момент, и это кажется мне совершенно неприемлемым поведением.У меня есть запасная эвристика для классов, которые не существуют - я бы предпочел, чтобы они объявлялись однажды слишком редко, а не слишком часто, но без over - с использованием эвристики, то естьЯ хочу предложить возможность использования загрузчика. Не нарушая сценарий.Когда-либо. Даже если это худший автозагрузчик в истории автозагрузчиков.
(Подчеркну: Я не хочу помогать с моими автозагрузчиками. Вопрос не в этом. )