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

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

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

Ответы [ 18 ]

311 голосов
/ 02 апреля 2009

У вас есть класс с тем же именем, объявленным более одного раза. Может быть, через несколько включений. При включении других файлов вам нужно использовать что-то вроде

include_once "something.php";

для предотвращения множественных включений. Это очень легко сделать, хотя и не всегда очевидно, так как между вами может быть длинная цепочка файлов.

116 голосов
/ 02 апреля 2009

Это означает, что вы уже создали класс.

Например:

class Foo {}

// some code here

class Foo {}

Тот второй Foo выдаст ошибку.

55 голосов
/ 02 апреля 2009

Это происходит, когда вы объявляете класс более одного раза на странице. Вы можете исправить это, поместив этот класс в оператор if (как показано ниже), или вы можете поместить его в отдельный файл и использовать require_once() вместо include().

if (!class_exists('TestClass')) {
   // Put class TestClass here
}
20 голосов
/ 15 июля 2011

Используйте include_once(); - при этом ваши коды будут включены только один раз.

15 голосов
/ 30 января 2010

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

12 голосов
/ 08 июля 2012

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

8 голосов
/ 04 июля 2011

Иногда это происходит из-за некоторых ошибок в PHP FastCGI.

Попробуйте перезапустить его. В Ubuntu это:

service php-fastcgi restart
6 голосов
/ 12 сентября 2013

У меня была такая же проблема при использовании autoload, как показано ниже:

<?php

function __autoload($class_name)
{
    include $class_name . '.php';
}


__autoload("MyClass1");

$obj = new MyClass1();

?>

а в другом классе было:

namespace testClassNamespace;


class MyClass1
{

    function  __construct()
    {
        echo "MyClass1 constructor";
    }
}

Решение состоит в том, чтобы сохранить совместимость пространства имен, в моем примере namespace testClassNamespace; в обоих файлах.

3 голосов
/ 23 ноября 2011

Просто добавление;

Эта ошибка также может возникнуть, если вы по ошибке поместили функцию в другую функцию.

3 голосов
/ 21 апреля 2012

PHP 5.3 (я думаю, что и более старые версии), похоже, имеет проблемы с одним и тем же именем в разных случаях. Так что у меня возникла эта проблема, когда у класса был класс Login и интерфейс, в котором он реализовывал LogIn. После того, как я переименовал LogIn в Log_In, проблема была решена.

...