Кто-нибудь знает, что может вызвать эту проблему?
Неустранимая ошибка PHP: невозможно повторно объявить класс
Кто-нибудь знает, что может вызвать эту проблему?
Неустранимая ошибка PHP: невозможно повторно объявить класс
Это означает, что вы уже создали класс.
Например:
class Foo {}
// some code here
class Foo {}
Второй Foo вызовет ошибку.
У вас есть класс с таким же именем, объявленный более одного раза. Может быть, через несколько включений. При включении других файлов вам нужно использовать что-то вроде
include_once "something.php";
для предотвращения множественных включений. Это очень просто, хотя и не всегда очевидно, поскольку у вас может быть длинная цепочка файлов, включаемых друг другом.
Это происходит, когда вы объявляете класс более одного раза на странице. Вы можете исправить это, обернув этот класс оператором if (как показано ниже), или вы можете поместить его в отдельный файл и использовать require_once()
вместо include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
class_exists('TestClass') === false
или !class_exists('TestClass')
- person furins; 08.08.2013
Используйте include_once();
- при этом ваши коды будут включены только один раз.
Это произойдет, если мы будем использовать любой из встроенных классов в библиотеке php. Я использовал имя класса как Directory и получил ту же ошибку. Если вы получите ошибку, сначала убедитесь, что имя используемого вами класса не является одним из встроенных классов.
Эта ошибка также может возникнуть, если вы определите метод __construct
более одного раза.
Иногда это происходит из-за некоторых ошибок в FastCGI PHP.
Попробуй его перезапустить. В Ubuntu это:
service php-fastcgi restart
Просто добавляю;
Эта ошибка также может возникнуть, если вы по ошибке поместили функцию в другую функцию.
PHP 5.3 (я думаю, что и более старые версии тоже), похоже, имеет проблемы с одним и тем же именем в разных случаях. Итак, у меня была эта проблема, когда у меня был класс Login и интерфейс, который он реализует. После того, как я переименовал LogIn в Log_In, проблема была решена.
Просто делайте одну вещь всякий раз, когда вы включаете или требуете имя файла, а именно class.login.php. Вы можете включить это так:
include_once class.login.php or
require_once class.login.php
Таким образом, он никогда не выдаст ошибку.
Эта функция напечатает стек, сообщающий вам, откуда он был вызван:
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 '</pre>';
}
Вызовите эту функцию в верхней части файла, который включает ваш класс.
Иногда он печатается только один раз, даже если ваш класс включен два или более раз. Это связано с тем, что PHP фактически анализирует все классы верхнего уровня в файле перед выполнением любого кода и немедленно выдает фатальную ошибку. Чтобы исправить это, оберните объявление класса в if(true) { ... }
, что переместит ваш класс на уровень ниже в области видимости. Затем вы должны получить две трассировки до фатальных ошибок PHP.
Это должно помочь вам найти, откуда ваш класс многократно включается в сложный проект.
Вы использовали Zend Framework? У меня такая же проблема.
Я решил ее, закомментировав следующую строку в config/application.ini
:
;includePaths.library = APPLICATION_PATH "/../library"
Я надеюсь, что это поможет вам.
Другой возможный виновник - контроль версий и неразрешенные конфликты. SVN может привести к тому, что один и тот же класс дважды появится в файле с конфликтующим кодом; две его альтернативные версии («моя» и «их»).
Я столкнулся с той же проблемой: новая версия php не работает так же с несколькими включениями одного и того же файла (как библиотеки), поэтому теперь мне нужно изменить все мои включения с помощью некоторого include_once.
Или эти уловки могут помочь, если у вас не слишком много классов в вашей библиотеке ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
У меня была такая же проблема. Неустранимая ошибка PHP: невозможно повторно объявить класс XYZ.php.
У меня есть два каталога, таких как controller
и model
, и я по ошибке загрузил XYZ.php в оба каталога (поэтому файл с тем же именем вызывает проблему).
Найдите во всем своем проекте и убедитесь, что у вас есть только один класс XYZ.php.
Добавьте пространство имен в свой класс, чтобы вы могли использовать то же имя класса.
я столкнулся с той же проблемой. выяснилось, дело было в названии класса. я справился с этим, изменив название. следовательно, решение проблемы.
Фактически это означает, что класс уже объявлен на странице, и вы пытаетесь его воссоздать.
Вот простой метод.
Решил проблему следующим образом. Надеюсь, это вам немного поможет.
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}
if(!class_exists('YourClass')){ include 'YourClass.php'; }
- person Timo Huovinen   schedule 18.09.2012