2008-09-16 8 views
28

Normalerweise verwende ich E_ALL, um alles zu sehen, was PHP über meinen Code sagen könnte, um es zu verbessern.Was ist die empfohlene error_reporting() Einstellung für die Entwicklung? Was ist mit E_STRICT?

Ich habe gerade eine Fehlerkonstante E_STRICT bemerkt, aber noch nie benutzt oder gehört, ist dies eine gute Einstellung für die Entwicklung? Das Handbuch sagt:

Laufzeitmeldungen. Aktivieren Sie, dass PHP Änderungen an Ihrem Code vorschlägt, die die beste Interoperabilität und Vorwärtskompatibilität Ihres Codes gewährleisten.

Also ich frage mich, ob ich die beste error_reporting Ebene mit E_ALL bin mit oder wäre das zusammen mit E_STRICT die besten sein? Oder gibt es noch eine andere Kombination, die ich noch lernen muss?

Antwort

43

In PHP 5, die ummantelten Dinge von E_STRICT durch E_ALL nicht abgedeckt, so die meisten Informationen zu erhalten, müssen Sie sie kombinieren:

error_reporting(E_ALL | E_STRICT); 

In PHP 5.4, E_STRICT wird in E_ALL enthalten sein, so dass Sie nur E_ALL verwenden können.

Sie können auch

error_reporting(-1); 

benutzen, die immer alle Fehler ermöglichen. Was ist semantisch korrekt als:

error_reporting(~0); 
+1

Beachten Sie, dass mit PHP> = 5.4 das E_STRICT mit E_ALL – mTorres

+1

@hakre enthalten ist, ich bin mir nicht sicher, ob ich Ihre Bearbeitung dieser Antwort verstehe.Sie implizieren eindeutig, dass es auf "esoterischen Systemen" möglich ist, dass "-1! = ~ 0". Was sind diese esoterischen Systeme, und existieren sie wirklich? Würde ich richtig raten, dass die PHP-Ganzzahlen in einem beliebigen Format gespeichert werden, das der C-Compiler zum Kompilieren von PHP verwendet, und dass Sie an ein hypothetisches Szenario denken, in dem jemand PHP zum Beispiel mit einem C-Compiler compiliert? Wie auch immer, wäre es nicht besser, Gordons Code-Snippet zu modifizieren, als das zu verlassen, was effektiv ein "eigentlich ist der letzte Absatz falsch" ist? –

+1

-1 ist eine Zahl, - ein numerischer Operator. abhängig davon, wie negative ganze Zahlen behandelt werden, kann es ~ 0 darstellen, darf aber nicht. Wo es nicht ist, das sind die Systeme, die ich "esoterisch" genannt habe. Was technisch falsch ist, ist, dass Sie den Bitoperator ~ anstelle eines numerischen Operators verwenden möchten. Siehe http://stackoverflow.com/questions/1967360/what-does-this-operator-me- hier ist es das, was du normalerweise ausdrücken möchtest. Daher ist der Code weniger falsch, wenn der korrektere Ausdruck verwendet wird. Und ja, ich habe es einmal erlebt. Aber das ist ein bisschen her, das letzte Mal, als ich gefragt wurde, konnte ich mich nicht aus dem Gedächtnis reproduzieren. – hakre

-1

ini_set ("display_errors", "2"); ERROR_REPORTING (E_ALL);

+0

OK, PHP Funktionsnamen Groß- und Kleinschreibung sind, aber man sollte es eher die Art und Weise verwenden, es verwendet werden soll (zB 'error_reporting (E_ALL | E_STRICT)', wobei der Name der Funktion nicht mit Großbuchstaben geschrieben wird). By the way, 'E_ALL' enthält nicht' E_STRICT' in PHP-Versionen kleiner als 5.4. – Sk8erPeter

5

Meiner Meinung nach, je höher Sie die Fehlermeldeebene in der Entwicklungsphase setzen, desto besser.

In einer Live-Umgebung möchten Sie einen leicht (aber nur geringfügig) reduzierten Satz, aber Sie möchten, dass sie irgendwo protokolliert werden, dass sie vom Benutzer nicht gesehen werden können (ich bevorzuge syslog).

http://php.net/error_reporting

E_ALL | E_STRICT für die Entwicklung mit PHP vor 5.2.0.

5.2 führt E_RECOVERABLE_ERROR ein und 5.3 führt E_DEPRECATED und E_USER_DEPRECATED ein. Wahrscheinlich möchten Sie diese aktivieren, wenn Sie eine dieser Versionen ausführen.

Wenn Sie Sie magische Zahlen verwenden, wollte nur die error_reporting Wert bis zu einem gewissen ziemlich hohen Wert von 2^n-1 einstellen könnte - sagen, 16777215, und das wäre wirklich nur einschalten alle Bits zwischen 1..n. Aber ich glaube nicht, magische Zahlen zu verwenden ist eine gute Idee ...

Meiner Meinung nach hat PHP den Ball ein wenig fallen lassen, indem E_ALL nicht wirklich alles sein. Aber anscheinend, es wird 6 in PHP festgelegt werden ...

2

In neueren PHP-Versionen enthält E_ALL mehr Klassen von Fehlern. Seit PHP 5.3 enthält E_ALL alles außer E_STRICT. In PHP 6 wird es sogar das beinhalten.Dies ist ein guter Hinweis: Es ist besser, mehr Fehlermeldungen als weniger zu sehen.

Was in E_ALL enthalten ist, ist auf der Seite PHP predefined constants im Online-Handbuch dokumentiert.

Persönlich, ich denke, es ist nicht so wichtig, wenn Sie E_STRICT verwenden. Es wird Ihnen sicherlich nicht schaden, zumal es Sie daran hindert, Skripte zu schreiben, die in zukünftigen PHP-Versionen eine kleine Chance haben, kaputt zu gehen. Auf der anderen Seite können strikte Nachrichten in manchen Fällen zu laut sein, vor allem wenn Sie es eilig haben. Ich schlage vor, dass Sie es standardmäßig einschalten und es ausschalten, wenn es nervig wird.

+0

E_STRICT ist in E_ALL ab 5.4 enthalten. –

1

Abhängig von Ihren langfristigen Unterstützungsplänen für diesen Code kann das Debuggen mit E_STRICT aktiviert Ihrem Code helfen, in der fernen Zukunft weiter zu arbeiten, aber es ist wahrscheinlich zu viel für den täglichen Gebrauch. Es gibt zwei wichtige Dinge über E_STRICT im Auge zu behalten:

  1. Per the manual, die meisten E_STRICT Fehler bei der Kompilierung erzeugt werden, nicht die Laufzeit. Wenn Sie die Fehlerstufe innerhalb Ihres Codes auf E_ALL erhöhen (und nicht über php.ini), werden Sie möglicherweise nie E_STRICT Fehler trotzdem sehen.
  2. E_STRICT innerhalb E_ALL unter PHP 6, enthielt aber nicht unter PHP 5. Wenn Sie Ihren Server PHP6 aktualisieren und haben E_ALL konfiguriert als 1 oben in # beschrieben, werden Sie beginnen, auf E_STRICT Fehler zu sehen, ohne dass zusätzliche Änderungen dein Teil.
+0

E_STRICT ist in E_ALL ab 5.4 enthalten. nicht PHP 6 – Lee

0

nicht streng von error_reporting sprechen, würde ich stark empfehlen, jedes IDE verwenden, die automatisch Parsen Fehler und gemeinsame Störungen zeigen (zB Zuordnung in Bedingung).

Zend Studio für Eclipse hat diese Funktion standardmäßig aktiviert, und seit ich es benutze, hat es mir geholfen viel bei der Erfassung von Fehlern, bevor sie auftreten.

Zum Beispiel hatte ich dieses Stück Code, wo ich einige Daten in der $GLOBALS Variable zwischengespeichert habe, aber ich schrieb versehentlich $_GLOBALS stattdessen. Die Daten wurden nie zwischengespeichert, und ich hatte nie gewusst, ob Zend mir nicht sagte: "Hey, dieses $_GLOBALS Ding taucht nur einmal auf, das könnte ein Fehler sein".

10

Verwenden Sie die in der php.ini folgende:

error_reporting = E_ALL | E_STRICT 

Auch sollten Sie Xdebug installieren, kann es Ihre Fehler markieren in hellen Farben und Druck nützliche Informationen zu blenden.

Lassen Sie niemals einen Fehler oder Hinweis in Ihrem Code, auch wenn es harmlos ist.

2

können Sie verwenden error_reporting = -1
Es wird immer von allen Bits bestehen (auch wenn sie nicht in E_ALL sind)

Verwandte Themen