2009-10-26 61 views
1

我正在建立一些簡單的驗證規則在PHP和我的IDE(phped)抱怨的語法。PHP這段代碼的語法有什麼問題?

任何人都可以告訴我什麼是以下錯?

function notBlank($str) { 
    (strlen($str) == 0) ? return false : return true; 
} 

的PhpED抱怨的 '意外收益'

讚賞任何意見。

謝謝。

回答

13

寫這樣的:

function notBlank($str){ 
    return strlen($str) != 0; 
} 
2

寫這樣的:

function notBlank($str) { 
    return (strlen($str) == 0 ? false : true); 
} 
+0

無需這裏三元運算符。 – 2009-10-26 19:13:44

+0

您可以刪除false或true,因爲操作符返回布爾值。 – Garrett 2009-10-26 19:15:03

+0

當然,這只是我的編碼風格... – 2009-10-28 23:16:06

2

三元運營商中,你不能使用回。如果你想保住你的語法,你必須做這樣的事情:

function notBlank($str = '') { 
    $var = (strlen($str) == 0) ? false : true; 
    return $var; 
} 

不過做通知,做事的默認方式更爲清晰可辨:

function notBlank($str = '') { 
    if(strlen($str) == 0) 
     return false; 
    else 
     return true; 
} 

希望它能幫助!

+1

不能說我喜歡「if(x)return false else return」類型的構造,當你可以使用「return!x」的時候。儘管如此,這實際上回答了查詢中出現問題的原始問題(而不僅僅是解釋執行此操作的另一種方法),因此可以使用+1。 – Beska 2009-10-26 21:06:37

0

strlen()當字符串爲空時返回0,並在PHP 0==false中返回。所以真的,沒有必要在功能中包裝strlen()。如果你想堅持一個布爾的答案,然後投它。即:

(bool) strlen($string); 

所以不是你的函數,這是assumably稱爲一個if塊,你得到的也

if(strlen($string)) //etc. 
+0

您可能仍想將其封裝在函數中,以使代碼更易於理解。誰會說「未來」的定義不會改變?如果代碼包含在函數中,那麼您的代碼能夠更好地處理更改,因爲它更加抽象。 – rmeador 2009-10-26 20:00:31

+0

@rmeador:對我來說,這聽起來像是即時編程。我同意,如果我計劃最終實現一個更復雜的條件,創建一個函數將是適當的。但如果我沒有這個意圖,我不想通過包裝它們來減緩簡單的函數調用。 – dnagirl 2009-10-26 20:18:14