Сегодня эта ошибка произошла и со мной, и я узнал, почему это может произойти (среди других возможных причин).
APC правильно идентифицирует каждый класс по полному имени, которое включает пространство имен классов. К сожалению, вы можете ссылаться на один и тот же класс с разными именами.
Например:
В моем коде был неверный оператор "use", импортирующий класс без пространства имен, как если бы он был внутри пространства имен.
Класс, скажем, «MyClass» находился в пространстве имен «\», что означает, что его правильное и полностью определенное имя было «\ MyClass».
В какой-то момент класс был назван его неквалифицированным именем "MyClass" и получил автозагрузку. В другом файле я (ошибочно) сослался на класс с префиксом пространства имен в выражении использования, скажем «use \ SomeNamespace \ MyClass;». Следовательно, класс был (снова) передан моему глобальному методу __autoload (), но с другим именем. Что еще хуже, метод автозагрузки был достаточно умен, чтобы найти класс в любом случае.
Мгновенно мой сценарий перестал работать, и все, что произошло, было то, что APC записал "[apc-error] Невозможно повторно объявить класс ..." в файле ошибок веб-сервера Apache. Мои страницы больше не были доступны.
Это не ошибка APC, а просто правильное поведение.
В моем случае это помогло временно отключить APC (чтобы мой скрипт выполнялся независимо от конфликта) и подключить оператор echo к моей функции __autoload, создав список переданных параметров. Класс, загруженный с неправильным именем, быстро обнаружился бы, и я мог бы исправить это и снова включить APC.
Надеюсь, это кому-нибудь поможет.