Klassendefinition, wo?

03/02/2016 - 22:01 von Stefan+Usenet | Report spam
Mein System beglückte mich heute etwas unerwartet mit der Meldung:

| Cannot declare class Page_Webshop_Search, because the name is already in use

Das ganze passiert bei einem:

| require_once 'search.php';

...welches aus verschiedenen Gründen den sonst in Verwendung befindlichen
Autoloader umgeht. Zunàchst fand ich die Meldung seltsam, weil ich
konsequent require_once verwende, und da doch eigentlich nichts doppelt
geladen werden sollte - das wàre dann aber "Cannot REdeclare class", und
tatsàchlich, wenn ich vor der Klassendefinition in search.php ein "die;"
setze, àndert sich gar nichts, das File wird also gar nicht geladen.

Nun habe ich ein grep über den gesamten Quelltext gemacht, aber nichts
anderes gefunden, was "page_webshop_search" heisst. Wie um alles in der
Welt bekomme ich jetzt heraus, *woher* der Name "already in use" ist und
als was er "in use" ist?

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Die Kraft, Frieden zu spenden - Stefan: tatschen, welch kaputtes Verlangen!
(Sloganizer)
 

Lesen sie die antworten

#1 k
04/02/2016 - 07:00 | Warnen spam
Stefan+ (Stefan Froehlich) writes:

Mein System beglückte mich heute etwas unerwartet mit der Meldung:

| Cannot declare class Page_Webshop_Search, because the name is already in use

Das ganze passiert bei einem:

| require_once 'search.php';

...welches aus verschiedenen Gründen den sonst in Verwendung befindlichen
Autoloader umgeht. Zunàchst fand ich die Meldung seltsam, weil ich
konsequent require_once verwende, und da doch eigentlich nichts doppelt
geladen werden sollte - das wàre dann aber "Cannot REdeclare class", und
tatsàchlich, wenn ich vor der Klassendefinition in search.php ein "die;"
setze, àndert sich gar nichts, das File wird also gar nicht geladen.

Nun habe ich ein grep über den gesamten Quelltext gemacht, aber nichts
anderes gefunden, was "page_webshop_search" heisst. Wie um alles in der
Welt bekomme ich jetzt heraus, *woher* der Name "already in use" ist und
als was er "in use" ist?



Bist du sicher, dass dein Autoloader nicht doch gelaufen war? Hast du
Opcache?

Diese Fehlermeldung bekommt man mit Namespaces hin.

php -a
Interactive shell

php > namespace n1 { class k1 {}}
php > class k1 {}
php > use n1\k1;
PHP Fatal error: Cannot use n1\k1 as k1 because the name is already in use in php shell code on line 1

Fatal error: Cannot use n1\k1 as k1 because the name is already in use in php shell code on line 1
php >

Ähnliche fragen