2012-11-23 62 views
0

快速的問題。我所看到的教程,簡單的if語句是這樣寫的:PHP - 如果isset速記

if($vest) echo $vest->naslov 

但是,當我把它寫這樣,我得到一個錯誤未定義的變量:背心,我必須寫代碼舊的方式方法:

if(isset($vest)) echo $vest->naslov 

是否有在的php.ini文件調節這個任何設置?目前我在Ubuntu上使用LAMP(最新版本)。

回答

2

您可以將error_reporting降到E_ALL^E_NOTICE,但這實際上是一個不好的做法,可能導致很多難以追蹤的錯誤。如果$vest是一個錯字,你不會知道,你的條件將永遠不會工作。

而是嘗試構建應用程序,以便始終知道哪些變量已定義,哪些未定義。然後,你可以使用速記版本,不用擔心。

1

Undefined variable: vest錯誤表示變量$vest未被識別。 isset($vest)不會產生錯誤的原因是因爲isset()檢查是否已經設置了$vest。因此,如果(isset($ vest))將對返回值isset($vest)執行布爾檢查。

如果你只是使用if($vest),php會假設已經設置了$vest(實際上,$vest仍然未定義)並且它執行布爾檢查操作。

4

你有E_STRICT上,如果你沒有聲明變量之前檢查它們,它會抱怨。在php.ini關閉E_STRICT可以解決這個問題,但更好的想法是簡單地提前聲明變量 - 只是這樣做,在你的函數的頂部:其餘前

$vest = null; 

你的邏輯。這是一個很好的做法,因爲它會迫使你以一種更接近實際的方式考慮你的程序執行的方式。

1

您可以關閉錯誤報告級別並且忽略的錯誤,但那會是危險的編程實踐。

當你輸入:if($vest),你真的是$vest==null$vest==''$vest===''isempty($vest)$vest===true或isset($背心)`?

if語句有很多用法;你應該在代碼中清楚你在做什麼。初始化腳本頂部的變量真的很難嗎?

1

我認爲最好的做法是將變量聲明爲負數狀態,然後 - 如果它們未設置,或者它們設置爲false,則速記if將按照您的意圖進行操作。

忽略錯誤是不好的(他們是有原因的,並且你的代碼會更具可讀性,因此可維護)。

+0

爲了'if'的目的將它們聲明爲null。另外,大多數其他目的。 –

+0

我通常會做'null'myself,但是不知道上下文(即變量的後面的用法),他們正在使用它..讓它爲它們開放。 –

1

if($foo)if(isset($foo))不是相同的東西,不應該互換使用。

if($foo)檢查是否$foo的計算結果爲true。另一種書寫方式是:if((bool) $foo === true)。因此,如果$foo未定義,則會收到來自PHP的通知。

與其像一些人建議的那樣關閉通知,不如以正確的方式編寫代碼。要檢查是否定義了$foo,請始終使用isset()