PHP-Äquivalent von Perls 'use strict' (um Variablen vor der Verwendung initialisieren zu müssen)

8

Pythons Konvention besteht darin, dass Variablen durch die erste Zuweisung erstellt werden und der Versuch, deren Wert zu lesen, bevor einer zugewiesen wurde, eine Ausnahme auslöst. PHP erstellt dagegen implizit eine Variable, wenn sie gelesen wird, mit einem Nullwert. Dies bedeutet, dass es in PHP einfach ist:

%Vor%

Diese Funktion gibt immer null zurück, und wenn null ein gültiger Wert für die Funktion ist, kann der Fehler für einige Zeit unerkannt bleiben. Das Python-Äquivalent würde sich beschweren, dass die Variable resukt verwendet wird, bevor sie zugewiesen wird.

Also ... gibt es eine Möglichkeit, PHP so zu konfigurieren, dass es bei Variablenzuweisungen strenger wird?

    
pdc 18.09.2008, 11:16
quelle

7 Antworten

10

PHP macht beim Überprüfen der Dinge zur Zeit des Parsens nicht viel Zeit.

Das Beste, was Sie tun können, ist, die Warnstufe hochzufahren, um Ihre Fehler zu melden, aber wenn Sie ein E_NOTICE erhalten, ist es zu spät und es ist nicht möglich, E_NOTICES im Voraus zu erzwingen.

Viele Leute haben das Flag "error_reporting E_STRICT", aber es ist immer noch eine rückwarnende Warnung, und schützt Sie nicht vor fehlerhaften Code-Fehlern, wie Sie sie geschrieben haben.

Dieses Juwel ist diese Woche auf der Mailingliste von php-dev aufgetaucht und ich denke, es ist genau das Werkzeug, das du willst. Es ist mehr ein lint-checker, aber es fügt der aktuellen lint-Prüfung, die PHP tut, Spielraum hinzu.

PHP-initialisiertes Google-Projekt

Es besteht die Hoffnung, dass wir dieses Verhalten mit ein bisschen Aufmerksamkeit in PHP selbst implementieren können. Setzen Sie Ihre 2-Cent-Punkte auf die PHP-Mailingliste / Bug-System / Feature-Anfragen und sehen Sie, ob wir deren Integration fördern können.

    
Kent Fredric 18.09.2008, 11:19
quelle
4

Es gibt keine Möglichkeit, es zu scheitern, so weit ich weiß, aber mit E_NOTICE in error_reporting Einstellungen können Sie es eine Warnung werfen (gut, eine Notiz :-) Aber immer noch eine Zeichenfolge, die Sie suchen können).

    
Vinko Vrsalovic 18.09.2008 11:18
quelle
1

Schauen Sie sich Fehlerberichte an, Ссылка

Was Sie wollen, ist wahrscheinlich E_STRICT. Denken Sie nur daran, dass PHP keine Namespaces hat und die Fehlerberichterstattung global wird. Irgendwie nervt es dich, wenn du eine 3rd-Party-Bibliothek von Entwicklern benutzt, die keine Fehlerberichterstattung eingeschaltet haben.

    
dvj 18.09.2008 11:22
quelle
0

Ich bin mir ziemlich sicher, dass es einen Fehler erzeugt, wenn die Variable nicht vorher deklariert wurde. Wenn Ihre Installation solche Fehler nicht anzeigt, überprüfen Sie die error_reporting () - Ebene in Ihrer php.ini-Datei.

    
nickf 18.09.2008 11:19
quelle
0

Sie können versuchen, mit der Fehlermeldeebene wie hier angegeben zu spielen: Ссылка , aber ich bin mir nicht sicher, ob es die Verwendung erwähnt der nicht eingeleiteten Variable, auch mit E_STRICT.

    
gizmo 18.09.2008 11:20
quelle
0

Es gibt etwas ähnliches: In PHP können Sie die Fehlermeldungsstufe ändern. Es ist eine bewährte Methode, das Maximum in einer Entwicklungsumgebung festzulegen. Um dies zu tun:

Fügen Sie Ihre PHP.ini hinzu:

%Vor%

Sie können dies auch ganz oben in der Datei hinzufügen, an der Sie gerade arbeiten:

%Vor%

Dies wird nicht verhindern, dass Ihr Code ausgeführt wird, aber das Fehlen von Variablenzuweisungen zeigt eine sehr deutliche Fehlermeldung in Ihrem Browser an.

    
e-satis 18.09.2008 11:33
quelle
0

Wenn Sie den "Analyze Code" für Dateien oder Ihr Projekt in Zend Studio verwenden, werden Sie vor nicht initialisierten Variablen gewarnt (das hat tatsächlich dazu beigetragen, eine Menge falsch geschriebener Variablen zu finden, die in selten verwendeten Teilen des Codes nur darauf warten, verursacht zu werden) sehr schwer zu erkennen Fehler). Vielleicht könnte jemand diese Funktionalität in der PHP-Lint-Funktion (php -l) hinzufügen, die derzeit nur nach Syntaxfehlern sucht.

    
Kris Erickson 18.09.2008 18:59
quelle

Tags und Links