redeclare
Hans Gustav
- php
0 Thomas Luethi0 romy
hi,
die include datei i_dropmenu.php meldet einen nicht übersetzbaren* fehler:
Fatal error: Cannot redeclare dropmenu() in /usr/.../i_dropmenu.php on line 2
* redeclare steht weder im internet noch in büchern.
Hans Gustav
P.S.: Der Server des Archivs ist ausgelastet.
Hallo,
die include datei i_dropmenu.php meldet einen nicht übersetzbaren* fehler:
Fatal error: Cannot redeclare dropmenu() in /usr/.../i_dropmenu.php on line 2
* redeclare steht weder im internet noch in büchern.
Das bedeutet, dass die Funktion dropmenu() zweimal vorkommt (dass Du sie erneut "deklarierst").
Wahrscheinlich einmal im "eigentlichen" Skript und einmal im Code-Schnipsel,
den Du mit include() einbindest.
Eine Funktion darf nur einmal vorkommen.
Wenn es zwei verschiedene Funktionen sind, benenne die eine um.
Sonst musst Du sie im Include oder in eigentlichen Skript loeschen, bzw. eine schlauere Struktur der Includes ausdenken.
HTH, mfg
Thomas
Hi,
die include datei i_dropmenu.php meldet einen nicht übersetzbaren* fehler:
glaub ich nicht
declare: deklarieren
redeclare: wieder deklarieren
Fatal error: Cannot redeclare dropmenu() in /usr/.../i_dropmenu.php on line 2
das bedeutet, dass es die Funktion dropmenu() schon gibt
dies umgeht man mit sauberer Programmierweise oder mit
include_once() bzw. require_once()
* redeclare steht weder im internet noch in büchern.
auch das glaube ich nicht
http://www.google.de/search?q=redeclare&ie=UTF-8&oe=UTF-8&hl=de&btnG=Google+Suche&meta=
ciao
romy
Hallo Romi,
das bedeutet, dass es die Funktion dropmenu() schon gibt
das kann ich glauben
dies umgeht man mit sauberer Programmierweise oder mit
das ist ja langweilig
include_once() bzw. require_once()
das glaube ich nicht!
include_once() bzw. require_once() achtet nicht auf den Inhalt der zu includierenden Dateien, sondern nur darauf, ob die Datei selber bereits included wurde.
Eine doppelte Funktionseinbindung kann man eigentlich nur auf zwei (drei) Arten vermeiden: den Funktionsnamen einen Präfix der jeweiligen "LIB" verpassen, der sich eindeutig unterscheidet,
OOP von PHP benutzen. Dafür ist es nämlich ganz brauchbar
Bedingte Funktionsdeklarationen benutzen:
if (!function_exists("blah"))
{
function blah()
{
return "blahblah";
}
}
Das funktioniert bestens, führt aber wieder zu ganz witzigen Nebenerscheinungen *ggg*
Zum Schluss noch neugierig gefragt: Kennt jemand eine Methode, mit der man Funktionen wieder dedeklarieren kann?
Grüße
Chris (C)
Hi,»» Hallo Romi,
bitte bitte schreib mich mit "y"
include_once() bzw. require_once()
das glaube ich nicht!
Du hast Recht, habe mich im Eifer des Gefechtes versehen ;)
Eine doppelte Funktionseinbindung kann man eigentlich nur auf zwei (drei) Arten vermeiden: den Funktionsnamen einen Präfix der jeweiligen "LIB" verpassen, der sich eindeutig unterscheidet,
ACK
bzw. ganz umständlich, bei jeder Funktion vorher prüfen ob sie schon existiert
Zum Schluss noch neugierig gefragt: Kennt jemand eine Methode, mit der man Funktionen wieder dedeklarieren kann?
mal ganz umständlich:
Du hast jede Funktion in einer eigenen Include-Datei, je nach Zustand bindest Du diese ein oder nicht 8ein erneutes Abrufen vom Server vorrausgesetzt)
Ansonsten: Nein!
ciao
romy
Hallo Romi^Hy, ***ggg tschuldigung***
Zum Schluss noch neugierig gefragt: Kennt jemand eine Methode, mit der man Funktionen wieder dedeklarieren kann?
mal ganz umständlich:
Du hast jede Funktion in einer eigenen Include-Datei, je nach Zustand bindest Du diese ein oder nicht 8ein erneutes Abrufen vom Server vorrausgesetzt)
Das wird dann aber wohl den Server killen. Ich habe schon richtig Angst vor dem Einsetzen des Besucherstromes. Ich habe ein paar Libs dabei, die inzwischen weit über 100k groß sind. Da wäre feinere Aufteilung sicher nicht schlecht. Oder man muss sich doch ein Linkkonzept bauen, bei dem nur die Funktionen aus einer solchen Riesen-Sammlung tatsächlich in die Scripte reingenommen werden, die man darin benötigt.
Und dann gibts Arbeitsscript, dass nach Änderungen von Funktionen mal eben alle Aktualisierungen in allen Scripten betreibt.
Grüße
Chris (C)