2012-08-01 26 views
5
<?php 
// $smith = ""; 
    $submit ="button_a"; 

    if($submit == "button_a") { 
     $smith = "button_a"; 
    } 
    elseif($submit == "button_b"){ 
     $smith = "button_b"; 
    } 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body> 

<p> 
    <?php echo($smith); ?> 
</p> 

</body> 
</html> 

PHPSTORM stellt für jede Datei ein Flag bereit: Rot - Fehler, Gelb - Warnung, Grün - OK.phpstorm warning php Variable wurde möglicherweise nicht definiert

Die PHP über der Kopfzeile wird $ Smith einen Wert zuweisen. Im Körper bekomme ich eine Warnung über $ Smith, dass es undefiniert sein könnte. Wenn ich alle Variable oben im PHP-Code deklariere, ($ smith = "";) ist es glücklich (keine Warnung).

Gibt es etwas, was ich tun sollte, um diese Warnungen zu verhindern?

Ich mag nicht die Idee, den Kommentar zu jedem zu sagen, um es nicht zu überprüfen, und ich möchte sie nicht alle ausschalten.

Das passiert viel, wenn ich meine db_login.php-Datei einschließe, die vier oder fünf Variablen definiert. Ich habe verschiedene db_login.php Dateien für WAMP, MAMP und den echten Schlauch.

Irgendwelche Gedanken?

+2

ich gründlich tho immer erklärt/Initialisierung eine Variable vor jedem Gebrauch empfehlen würde ... macht das Debuggen so viel einfacher. – Brian

+0

... und keine globalen Variablen für Einstellungen verwenden (z. B. db details etc - statische Klasse für eine Hilfe) - wenn es sich um Ihren eigenen Code handelt :) – LazyOne

Antwort

6

Ja, es gibt zwei Dinge, die Sie tun können, um diese Warnung loszuwerden. Was Sie gesagt haben:

$smith = ""; 
if($submit == "button_a") { 
    $smith = "button_a"; 
} 
elseif($submit == "button_b"){ 
    $smith = "button_b"; 
} 

Oder überprüfen Sie, ob es gesetzt ist, wenn Sie es drucken:

<?php 
    if(isset($smith)) { 
     echo($smith); 
    } 
?> 

Dies ist jedoch nur eine Warnung, und es ist so dass Sie wissen, dass es eine Bedingung ist, dass $smith gewonnen nicht definiert (wenn $submit nicht "button_a" ist und nicht "button_b" ist). Wenn diese Bedingung eintreten würde, würden Sie $smith drucken, wenn es nicht festgelegt wurde, was ein Fehler in Ihrem Skript sein könnte.

+1

PHPSTORM ist schlauer als ich gedacht hatte. Wenn ich anderswo anders ändere, damit alle Pfade durch den Code einen Wert zuweisen, ist es glücklich. Was ist mit meiner db_login-Include-Datei, die Datenbank, Benutzer, Passwort, Tabelle usw. definiert? Irgendeine Möglichkeit, die Include-Datei zu "sehen", damit ich sie nicht alle vordefinieren muss? – mkstlwtz

+0

Weil dann gibt es keine Bedingungen, in denen $ Smith nicht definiert wäre. Es ist tatsächlich hilfreich (IMO), da es Ihnen sagt, dass eine Bedingung existiert, wo Sie auf eine Variable zugreifen würden, die nicht definiert wurde. Sie würden diese Information nur von PHP erhalten, wenn Sie das Skript mit den "bug" Bedingungen ausgeführt hätten (d. H. Wo '$ submit' nicht' button_a' oder 'button_b' ist). Informationen zu Problemen mit der Include-Datei finden Sie unten in Dreen's Antwort. – nickb

14

Sie können PHPStorm anweisen, Berichte über undefinierte Variablen zu ignorieren, wenn require für include-Anweisungen im selben Ausführungsablauf vor dem Zugriff auf Variablen vorhanden sind. Sie finden es unter 'Undefinierte Variable' - Ignorieren Sie 'include' und 'require' Anweisungen. Es ist standardmäßig aktiviert, also sollten Sie es deaktivieren.

enter image description here

Hinweis: Die Einstellung ist in File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable

+0

Das ist perfekt. Vielen Dank. – mkstlwtz

+3

Wo sind diese Einstellungen? – bafromca

+1

Datei> Einstellungen (Strg + Alt + S)> Projekteinstellungen> Inspektionen> PHP> Nicht definiert> Undefinierte Variable – Kobra

Verwandte Themen