2013-11-15 17 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 
    } 
    } 
Смежные вопросы