2013-11-15 77 views
0

試圖減少長條件。 任何關於我如何使這個條件清潔的建議?最好的方法來寫這個條件

if (!($replacement === null || $replacement === '') && strpos($replacement, 'unknown') === FALSE) { 
... 
} 
+0

看起來不錯..... – hek2mgl

+0

不,我得到了邏輯錯誤(或者他可能)。 – Barmar

+0

'if(!in_array($ replacement,['',null,'unknown'])){...} – moonwave99

回答

0

您的代碼會導致錯誤,如果$replacement是一個數組或對象(沒有__toString()法):

[email protected]:~$ php -a 
Interactive shell 

php > strpos(array(), ''); 

Warning: strpos() expects parameter 1 to be string, Array given in php shell code on line 1 

Call Stack: 
    10.7258  636424 1. {main}() php shell code:0 
    10.8469  637640 2. strpos() php shell code:1 

您需要檢查是否$replacement是一個字符串。這使得在$replacement可能是一個數組或對象(無論什麼假的原因)的情況下你的代碼防彈,並節省您的=== null檢查:

if (is_string($replacement) 
    && !empty($replacement) 
    && strpos($replacement, 'unknown') === FALSE) 
{ 

} 
0

我會避免混合||&&,而是有機結合起來的所有條件&&

if ( $replacement !== null 
    && $replacement !== '' 
    && strpos($replacement, 'unknown') === FALSE) { 
    ... 
} 

這使得查看哪些條件按照哪個順序被檢查是非常直接的。

-1
if (is_string($replacement)) { 
     if ($replacement != "" && $replacement != "unknown") { 
     // TODO Here 
    } 
    } 
相關問題