2012-04-09 13 views
1

Ich arbeite auf einer Website mit ein paar Freunden, und vor kurzem haben sich Benutzer über ein ziemlich wichtiges Feature beschwert, das nur eine leere Seite zurückgibt. Dies passiert nur für einige Benutzer, während andere Benutzer in der Lage sind, es vollkommen in Ordnung zu benutzen.Hört PHP manchmal Funktionsdeklarationen?

Ich konsultierte Debug-Ausgabe und es stellt sich heraus, dass eine Funktion zweimal deklariert wird. Einmal auf der Hauptseite des Features (foo.php) und einer in einer Datei, die require_once 'Ed. Offensichtlich bin ich auf dem richtigen Weg, es jetzt zu beheben, aber was verwirrt mich ist, dass viele Leute nicht bekommen, dieses Problem beim Besuchen der Seite. Beide Funktionsdeklarationen sind identisch; Die Körper scheinen von einer Datei in die andere kopiert und eingefügt worden zu sein. Keine dieser Funktionsdeklarationen ist bedingt; sie sollten beide immer stattfinden.

Kennt jemand Situationen, in denen PHP in der Lage ist, mit meinem Fehler umzugehen und die Seite trotz dieses fatalen Fehlers dennoch funktionieren zu lassen?

+0

zuerst beheben alle mit 'require_once', und je nachdem, welche Seiten besucht werden, kann es Fälle geben, in denen eine Seite eine bestimmte Datei einmal oder mehrmals enthalten hat. – linuxeasy

+0

Wie in der Post gesagt, verwende ich bereits require_once. – Neko

+0

PHP erlaubt keine Funktionsdeklaration mehr als einmal (mit dem gleichen Umfang). Manche Besucher denken anders und schreien nicht. – Dev

Antwort

0

Leider kann PHP niemals fatale Fehler oder Funktionsdeklarationen ignorieren, da PHP in diesem Fall verwirrt ist, welche Funktionsdeklarationen zu berücksichtigen sind, ob eine alte oder eine neue Deklaration verwendet werden soll.

  • Fatal Error bedeutet, es hat etwas ist so falsch, dass PHP ist verwirrt, was als nächstes zu tun, und deshalb Ihre Aufgabe es richtig zu machen.

  • Sorry PHP wird nicht versuchen, herauszufinden, ob zwei oder mehr Deklarationen gleich waren und dann einen von ihnen ignorieren. Wenn dies getan werden musste, wird das ohnehin langsame PHP noch langsamer. Im Interesse der Community sollten Sie also einen korrekten Code schreiben, anstatt den PHP-Interpreter darum zu bitten, dies für Sie zu korrigieren.

+0

Ich weiß das, und ich frage nicht nach einer Möglichkeit, um PHP mein Problem zu lösen, wie Sie im ursprünglichen Beitrag sehen können. PHP ** ignoriert diesen fatalen Fehler unter bestimmten Umständen derzeit und ich versuche herauszufinden, warum dies der Fall ist. – Neko

+0

Sie können dies leicht durch Debuggen im Detail und durch Überprüfen von Fehlerprotokollen herausfinden.seine Programmierung und alles kann trotzdem programmiert werden! Wenn das Feld leer ist, bedeutet dies, dass es sich um einen Fehler handelt. Wenn Sie die Fehlerprotokollierung für PHP-Fehler noch nicht aktiviert haben, sollten Sie dies in Erwägung ziehen. – linuxeasy

+0

@Neko: Nein, es ignoriert es nicht. Es kann nicht. Es ist etwas anderes. – netcoder

1

es kann die Art der Funktionsdeklaration sein ist öffentlich, privat oder geschützt, so dass Sie vielleicht nicht fatalen Fehler durch Glück bekommen werden, wie bis zu meinem Wissen php funktioniert nicht Neudeklaration in oder mit irgendwelchen Mitteln ermöglichen.