2009-10-26 3 views
1

Я пытаюсь решить эту ошибку: Fatal error: Cannot redeclare classНайти, где класс был экземпляр

Я искал везде, и я не могу найти, где был экземпляр класса.

В любом случае я могу распечатать отладочную информацию о существующем экземпляре этого класса.

ответ

3

Скорее всего, вы импортируете файл, который объявляет класс более одного раза. Это может быть симптомом того, что включает/требует выхода из-под контроля, поэтому вам может понадобиться просто ваша структура.

Один альтернативный подход - использовать автозагрузку для загрузки классов, чтобы избежать такой проблемы. Другим является использование include_once или require_once. Обычно я предпочитаю использовать требование с простой структурой.

+0

Php может просто выйти из-под контроля, я уже использовал include_once. Но спасибо, что помогли мне найти, где была ошибка. – Roch

+0

Я использовал: include_once ($ this-> PluginDir. 'Class.php'); и include_once (_INCLUDE_PATH _. "../ class.php"); в другом месте. – Roch

3

Да, глупый php не говорит вам, где был объявлен класс. Попробуйте следующее (непосредственно перед фатальной ошибкой линии)

$r = new ReflectionClass("YourClassName"); echo $r->getStartLine(); 
+2

, что почти похоже на «Да, глупо! ...» – andho

+0

Я бы добавил, что вы можете найти файл, в котором класс объявлен с помощью $ r-> getFileName(); – thelastshadow

0

Вы можете узнать, где объект был инстанцированное с помощью var_dump(debug_backtrace()); и глядя на стек вызовов.