2012-08-01 338 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爲每個文件提供一個標誌:紅色 - 錯誤,黃色 - 警告,綠色 - 確定。phpstorm警告php變量可能尚未定義

標題上方的PHP將爲$ smith分配一個值。在正文中,我收到了$ smith的警告,表示可能未定義。如果我在PHP代碼的頂部聲明瞭所有變量,($ smith =「」;)它是開心的(沒有警告)。

有什麼我應該做的,以防止這些警告?

我不喜歡將評論附加到每個人說不檢查它的想法,我不想把它們全部關閉。

當我包含定義四個或五個變量的db_login.php文件時,會發生這種情況。我有不同的WAMP,MAMP和真正的軟管db_login.php文件。

有什麼想法?

+2

我會全力推薦壽還是宣告/任何使用前初始化變量...使調試容易得多。 – Brian 2012-08-01 08:52:06

+0

...而不是使用全局變量的設置(例如數據庫細節等 - 靜態類的幫助) - 如果它是你自己的代碼,當然:) – LazyOne 2012-08-01 13:17:11

回答

6

是的,有兩件事你可以擺脫這個警告。你說什麼:

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

或檢查它的設置,當你打印:

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

然而,這只是一個警告,它是讓你知道,有一個條件$smith韓元沒有定義(當$submit不是"button_a"而不是"button_b")。如果發生這種情況,您將在未設置時打印$smith,這可能是您腳本中的錯誤。

+1

PHPSTORM比我想象的更聰明。如果我將elseif更改爲else,那麼通過代碼的所有路徑都會分配一個值,這很令人高興。那麼我的db_login包含文件定義了數據庫,用戶,密碼,表格等等。任何讓它「查看」包含文件的方法,以便我不必預先定義它們全部? – mkstlwtz 2012-08-01 01:30:10

+0

因爲那樣就沒有'$ smith'不會被定義的條件。它實際上是有用的(IMO),因爲它告訴你存在一個條件,你將訪問一個尚未定義的變量。如果您執行腳本的「bug」條件(即'$ submit'不是'button_a'或'button_b'),您只會從PHP獲得這些信息。對於包含文件問題,請參閱下面的Dreen的答案。 – nickb 2012-08-01 01:32:12

14

如果include語句上的require位於變量訪問之前的相同執行流中,那麼可以告訴PHPStorm忽略未定義的變量報告。你會在'Undefined variable'中找到它 - 忽略'include'和'require'語句。它默認啓用,所以你應該禁用它。

enter image description here

注:該設置是在File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable

+0

這很完美。謝謝。 – mkstlwtz 2012-08-01 02:11:47

+3

這些設置在哪裏? – bafromca 2013-09-28 01:51:38

+1

文件>設置(Ctrl + Alt + S)>項目設置>檢查> PHP>未定義>未定義變量 – Kobra 2014-10-10 17:09:06