Czy ktoś wie, co może powodować ten problem?
Błąd krytyczny PHP: nie można ponownie zadeklarować klasy
php
class
fatal-error
Jin Yong
źródło
źródło
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Odpowiedzi:
Oznacza to, że utworzyłeś już klasę.
Na przykład:
To drugie Foo spowodowałoby błąd.
źródło
Masz klasę o tej samej nazwie zadeklarowaną więcej niż raz. Może przez wiele dołączeń. Dołączając inne pliki, musisz użyć czegoś takiego jak
aby zapobiec wielokrotnym wtrąceniom. Jest to bardzo łatwe, choć nie zawsze jest to oczywiste, ponieważ możesz mieć długi łańcuch plików dołączanych jeden do drugiego.
źródło
Dzieje się tak, gdy deklarujesz klasę więcej niż raz na stronie. Możesz to naprawić, opakowując tę klasę instrukcją if (jak poniżej) lub możesz umieścić ją w osobnym pliku i użyć
require_once()
zamiastinclude()
.źródło
class_exists('TestClass') === false
lub!class_exists('TestClass')
Użyj
include_once();
- dzięki temu Twoje kody zostaną uwzględnione tylko raz.źródło
Stanie się tak, jeśli użyjemy którejkolwiek z wbudowanych klas w bibliotece php. Użyłem nazwy klasy jako katalogu i otrzymałem ten sam błąd. Jeśli pojawi się błąd, najpierw upewnij się, że nazwa klasy, której używasz, nie jest jedną z klas wbudowanych.
źródło
Ten błąd może również wystąpić, jeśli zdefiniujesz
__construct
metodę więcej niż raz.źródło
Czasami dzieje się tak z powodu błędów w FastCGI PHP.
Spróbuj go ponownie uruchomić. W Ubuntu jest to:
źródło
Miałem ten sam problem podczas używania w
autoload
następujący sposób:aw drugiej klasie:
Rozwiązaniem jest zachowanie zgodności przestrzeni nazw, w moim przykładzie
namespace testClassNamespace;
w obu plikach.źródło
Tylko dodawanie;
Ten błąd może również wystąpić, jeśli przez pomyłkę umieścisz funkcję w innej funkcji.
źródło
Wydaje się, że PHP 5.3 (myślę że starsze wersje także) ma problem z tą samą nazwą w różnych przypadkach. Więc miałem ten problem, gdy miał klasę Login i interfejs, który implementuje LogIn. Po zmianie nazwy LogIn na Log_In problem został rozwiązany.
źródło
Po prostu zrób jedną rzecz, gdy dołączasz lub wymagasz nazwy pliku, a mianowicie class.login.php. Możesz to załączyć w ten sposób:
W ten sposób nigdy nie zgłasza błędu.
źródło
Ta funkcja wydrukuje stos informujący, skąd został wywołany:
Wywołaj tę funkcję u góry pliku zawierającego twoją klasę.
Czasami wydrukuje się tylko raz, mimo że Twoja klasa jest uwzględniana dwa lub więcej razy. Dzieje się tak, ponieważ PHP faktycznie analizuje wszystkie klasy najwyższego poziomu w pliku przed wykonaniem jakiegokolwiek kodu i natychmiast zgłasza błąd krytyczny. Aby temu zaradzić, zawiń swoją deklarację klasy
if(true) { ... }
, co przeniesie twoją klasę o jeden poziom niżej w zakresie. Następnie powinieneś uzyskać dwa ślady przed krytycznymi błędami PHP.Powinno to pomóc w znalezieniu miejsca, w którym Twoja klasa jest wielokrotnie uwzględniana w złożonym projekcie.
źródło
Czy korzystałeś z Zend Framework? Ja też mam ten sam problem.
Rozwiązałem to, komentując ten następujący wiersz w
config/application.ini
:Mam nadzieję, że to Ci pomoże.
źródło
Innym możliwym winowajcą jest kontrola źródła i nierozwiązane konflikty. SVN może spowodować, że ta sama klasa pojawi się dwukrotnie w pliku kodu powodującym konflikt; dwie alternatywne wersje tego („moja” i „ich”).
źródło
Napotkałem ten sam problem: nowsza wersja php nie radzi sobie tak samo z wieloma włączeniami tego samego pliku (jako biblioteki), więc teraz muszę zmienić wszystkie moje dołączenia przez niektóre include_once.
Lub te sztuczki mogą pomóc, jeśli nie masz zbyt wielu zajęć w swojej bibliotece ...
źródło
Miałem ten sam problem „Błąd krytyczny PHP: nie można ponownie zadeklarować klasy XYZ.php”.
Mam dwa katalogi, takie jak
controller
i,model
i przesłałem przez pomyłkę XYZ.php w obu katalogach. (Więc plik o tej samej nazwie powoduje problem).Pierwsze rozwiązanie:
Znajdź w całym projekcie i upewnij się, że masz tylko jedną klasę XYZ.php.
Drugie rozwiązanie:
Dodaj przestrzeń nazw do swojej klasy, aby móc używać tej samej nazwy klasy.
źródło
napotkałem ten sam problem. dowiedziałem się, że sprawa była nazwą klasy. poradziłem sobie z tym, zmieniając nazwę. stąd rozwiązanie problemu.
źródło
W rzeczywistości oznacza to, że klasa jest już zadeklarowana na stronie i próbujesz ją odtworzyć.
Oto prosta technika.
Rozwiązałem problem w następujący sposób. Mam nadzieję, że to ci trochę pomoże.
źródło