2012-08-01 8 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 dostarcza flagę dla każdego pliku: Czerwony - Błędy, Żółty - Ostrzeżenie, Zielony - OK.Zmienna phpstorm warning php może nie być zdefiniowana

PHP powyżej nagłówka przydzieli wartość do $ smith. W ciele dostaję ostrzeżenie od kowala, że ​​może ono być nieokreślone. Jeśli zadeklaruję całą zmienną na górze kodu PHP, ($ smith = "";), jest szczęśliwy (bez ostrzeżenia).

Czy jest coś, co powinienem zrobić, aby zapobiec tym ostrzeżeniom?

Nie podoba mi się pomysł dołączania komentarza do każdego z nich, aby nie sprawdzać i nie chcę ich wyłączyć.

Dzieje się tak, gdy dołączę mój plik db_login.php, który definiuje cztery lub pięć zmiennych. Mam różne pliki db_login.php dla WAMP, MAMP i prawdziwego węża.

Jakieś myśli?

+2

gorąco polecam tho zawsze deklarując/inicjalizacji zmiennej przed każdym użyciu ... sprawia, że ​​debugowanie tak dużo łatwiejsze. – Brian

+0

... i nie używać globalnych zmiennych do ustawień (np. Db szczegóły itp. - klasa statyczna dla pomocy) - jeśli to twój własny kod, oczywiście :) – LazyOne

Odpowiedz

6

Tak, dwie rzeczy możesz zrobić, aby pozbyć się tego ostrzeżenia. Co pan powiedział:

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

lub sprawdzić, czy jest on ustawiony, gdy go wydrukować:

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

Jednak jest to tylko ostrzeżenie, a to jest z powiadomieniem, że jest to stan, który $smith won Zdefiniuj (gdy $submit nie jest "button_a" i nie jest "button_b"). Jeśli ten warunek miałby miejsce, drukowałbyś $smith, gdy nie był ustawiony, co może być błędem w twoim skrypcie.

+1

PHPSTORM jest mądrzejszy niż myślałem. Jeśli zmienię elseif na indziej, tak aby wszystkie ścieżki w kodzie przypisywały wartość, jest szczęśliwa. Co z moim db_login zawiera plik, który definiuje bazę danych, użytkownika, hasło, tabelę itp. Jakikolwiek sposób sprawić, by "zaglądał" do pliku włączającego, aby nie musieć ich wstępnie definiować? – mkstlwtz

+0

Ponieważ nie ma żadnych warunków, w których '$ smith' nie zostałby zdefiniowany. Jest to naprawdę pomocne (IMO), ponieważ mówi, że istnieje warunek, w którym miałbyś dostęp do zmiennej, która nie została zdefiniowana. Otrzymasz te informacje tylko od PHP, jeśli wykonasz skrypt z warunkami "błędu" (tzn. Gdzie '$ submit' nie jest' button_a' lub 'button_b'). W przypadku problemów z plikiem włączającym, zobacz poniżej odpowiedź Dreen. – nickb

14

Możesz powiedzieć PHPStorm, aby ignorował niezdefiniowane raporty zmiennych, jeśli wymaga tego instrukcja include, która znajduje się w tym samym strumieniu wykonania przed zmiennym dostępem. Znajdziesz go w "Niezdefiniowana zmienna" - Ignoruj ​​instrukcje "include" i "require". Jest on domyślnie włączony, więc powinieneś go wyłączyć.

enter image description here

Uwaga: Ustawienie jest w File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable

+0

To jest idealne. Dziękuję Ci. – mkstlwtz

+3

Gdzie są te ustawienia? – bafromca

+1

Plik> Ustawienia (Ctrl + Alt + S)> Ustawienia projektu> Inspekcje> PHP> Niezdefiniowane> Niezdefiniowana zmienna – Kobra

Powiązane problemy