2014-06-12 32 views
0

我保持一些舊的PHP代碼,我發現代碼中的一個測試很多地方的變量是非空的形式如下:簡化測試非空的變量

if (!(isset($field_name) && strlen($field_name) > 0))

要我思維方式,下面簡單得多的形式會做同樣的事情:

if ($field_name) 

我失去了一些subltety由此更復雜的形式是更精確?我傾向於在任何需要添加新代碼的地方使用更簡單的表單。

+0

你應該在PHP中查看[值爲false的列表](http://www.php.net//manual/en/language.types.boolean.php)。那些布爾值爲false,整數0,浮點數0.0,空字符串,字符串「0」,零元素數組,空元素和由空標記創建的SimpleXML對象。 – Marty

+0

我忽略了在我們的系統中指定0或其他的falsy值是非法的。所以我沒有明確說明意圖。我的感覺是答案中有價值,我可能會接受其中的一個作爲「答案」。我相信上面的第一行,無論其精度如何,都過於複雜。部分原因是因爲它是一個條件否定的複合條件。 –

回答

0

他們做不是做同樣的事情。第一個代碼示例:

  1. 檢查是否存在$field_name(我的數字!是無意的,因爲它不使感測它被寫入的方式)
  2. 檢查是否$field_name有一個字符串長度大於零

第二代碼示例:

  1. 檢查該變量具有布爾true
  2. 如果沒有設置$field_name,會拋出錯誤。

第一個代碼段是在其意圖清楚精確,並執行特定的任務。

第二個片段是非常基本的,只驗證變量是否具有布爾真值(並且有更好的方法可以做到這一點)。如果$field_name包含一個字符串「0」,這段代碼將導致難以發現錯誤,因爲它會失敗,因爲「0」的計算結果爲false。第一個片段可以解決這個問題。

0

如果要是$字段爲空($域)將會失敗,0,0.00,虛假或任何可以鑄造假

如果(!isset($場))

會失敗,如果$現場並沒有在所有

1

被宣佈可以使用empty(),以取代第一行:

if (!empty($field_name)) 

與你的第二個例子的問題是,它會產生,如果VA警告沒有設置riable。 empty()isset()都不會爲不存在的變量生成警告。

需要注意的是,你總是必須考慮到可能的值,所以如果你的價值可以0'0',這將無法正常工作後$var = 0;empty($var)將評估爲true

0

你說得對,你發現的代碼很奇怪。這或許應該是:

if(!(isset($field_name)) { ... do something } 

if(isset($field_name) && strlen($field_name) > 0) { ... do something } 

...正如你可以欣賞,也沒有必要測試未定義的變量的長度。

但是,if($field_name)if(!(isset($field_name))不一樣,其差別並不細微。事實上,前者會爲你贏得一個Undefined variable: fieldname,如果由於運氣不好而招致$field_name未定義。

有什麼區別?

  1. if($field_name)測試如果現有的變量$field_nameevaluates to TRUE。例如,它的值可能是「我的狗」,並且評估爲TRUE
  2. if(!(isset($field_name))測試是否存在變量$field_name