Неустранимая ошибка PHP: невозможно повторно объявить класс - PullRequest
159 голосов
/ 02 апреля 2009

Кто-нибудь знает, что может вызвать эту проблему?

Неустранимая ошибка PHP: невозможно переопределить класс

Ответы [ 18 ]

3 голосов
/ 20 июня 2016

Просто сделайте одну вещь, когда вы включаете или запрашиваете имя файла, а именно class.login.php. Вы можете включить это так:

include_once class.login.php or 
require_once class.login.php

Таким образом, он никогда не выдаст ошибку.

2 голосов
/ 18 июля 2013

Эта функция напечатает стек, сообщающий вам, откуда он был вызван:

<code>function PrintTrace() {
    $trace = debug_backtrace();
    echo '<pre>';
    $sb = array();
    foreach($trace as $item) {
        if(isset($item['file'])) {
            $sb[] = htmlspecialchars("$item[file]:$item[line]");
        } else {
            $sb[] = htmlspecialchars("$item[class]:$item[function]");
        }
    }
    echo implode("\n",$sb);
    echo '
'; }

Вызовите эту функцию вверху файла, который включает ваш класс.

Иногда он печатается только один раз, даже если ваш класс включается два или более раз. Это связано с тем, что PHP фактически анализирует все классы верхнего уровня в файле перед выполнением любого кода и немедленно генерирует фатальную ошибку. Чтобы исправить это, оберните объявление вашего класса в if(true) { ... }, что переместит ваш класс на уровень в области видимости. Тогда вы должны получить две трассировки до фатальных ошибок PHP.

Это должно помочь вам определить, где ваш класс включается несколько раз в сложный проект.

1 голос
/ 11 апреля 2017

У меня возникла та же проблема: «Неустранимая ошибка PHP: невозможно повторно объявить класс XYZ.php».

У меня есть два каталога, например controller и model, и я по ошибке загрузил XYZ.php в оба каталога (поэтому файл с одинаковым именем вызывает проблему).

Первое решение:

Найдите в своем проекте и убедитесь, что у вас есть только один класс XYZ.php.

Второе решение:

Добавьте пространство имен в своем классе, чтобы вы могли использовать то же имя класса.

1 голос
/ 12 ноября 2014

Я столкнулся с той же проблемой: более новая версия php не работает одинаково с несколькими включениями одного и того же файла (как библиотеки), поэтому теперь мне нужно изменить все мои включения на некоторый include_once.

Или этот трюк может помочь, если у вас не слишком много классов в вашей библиотеке ...

if( class_exists('TestClass') != true )
{
   //your definition of TestClass
}
1 голос
/ 23 октября 2012

Другой возможный виновник - контроль источников и неразрешенные конфликты. SVN может привести к тому, что один и тот же класс появится дважды в файле конфликтующего кода; две его альтернативные версии («моя» и «их»).

1 голос
/ 14 ноября 2011

Вы использовали Zend Framework? У меня тоже такая же проблема.
Я решил это, закомментировав эту строку в config/application.ini:

;includePaths.library = APPLICATION_PATH "/../library"

Надеюсь, это поможет вам.

0 голосов
/ 25 декабря 2014

На самом деле это означает, что класс уже объявлен на странице, и вы пытаетесь воссоздать его.

Простая техника выглядит следующим образом.

Я решил проблему следующим образом. Надеюсь, это вам немного поможет.

if(!class_exists("testClassIfExist"))
{
    require_once("testClassIfExist.php");
}
0 голосов
/ 04 июля 2011

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

...