Неустранимая ошибка: невозможно повторно объявить класс DbBase - PullRequest
0 голосов
/ 22 ноября 2011

Я знаю, что на это уже отвечали и почему это вызвано.Однако, в моем случае, проблема возникает только на MacOS Lion (10.7), который находится на php 5.3.6.Та же самая база кода работает на моем компьютере с Windows 7, который находится на php 5.3.8.

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

class DbBase
{
   ...
}

в файле, включенном в несколько файлов.Однако ошибка исчезнет, ​​если я оберну объявление класса внутри:

if (class_exists('DbBase') != true)
{
    class DbBase
    {
        ...
    }
} 

У меня есть такой сценарий:

Файл DBBase.php:

defines Class DBBase

Файл A_DB.php:

require_once("DBBase.php")

Файл B_DB.php:

require_once("DBBase.php")

Файл foo.php:

require_once("A_DB.php")
require_once("B_DB.php)

Таким образом, файл DBBase.php включается дважды.Неужели?

Любое понимание приветствуется.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2012

У меня была такая же ошибка.Однако это не было связано с «объявлением одного класса несколько раз».Это потому, что я сделал резервную копию этого класса: class.shipping.php class.shipping_092512_bk.php Затем я загрузил файл резервной копии на сервер.Это вызвало сбой приложения из-за двух классов.Итак, я переименовал резервную копию во что-то другое без расширения файла .php «class.shipping_092512.bk».Проблема решена.

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

Эта ошибка возникает, когда вы объявляете один класс несколько раз, а не один раз;Код ниже выдаст эту ошибку.

class phpp{}
class phpp{}

Маловероятно, что поведение не совпадает на 5.3.6 и 5.3.8, так как не было каких-либо существенных изменений в классах и объектах.

Вы должны проверитьдля дублированных кодов в файлах вы requiring once.,.

РЕДАКТИРОВАТЬ:

Оператор require_once () идентичен require (), за исключением того, что PHP проверит, был ли файл уже включен, и, если это так, не будет включать (требовать) его снова.

Таким образом, в вашем случае он не включается несколько раз, тогда как при использовании require или include.

Однако вы должны реструктурировать весь код, чтобы предотвратить повторное объявление класса.

class lol{}
if(!class_exists("lol")){
    class lol{
        function ll (){
            return "ss";
        }
    }
}

echo lol::ll(); 

Вы не сможете получить доступ к этому ^^, так как он все еще переопределен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...