Запись IF ELSE для удобочитаемости. PHP.

12
[Удален]
1256

Когда нам нужно сравнить просто две переменные, вроде бы ничего сложного...

if ($a > 5) ...

А вот если необходимо проверить несколько переменных, при этом некоторые переменные должны обязательно иметь определенное значение, а некоторым разрешается иметь несколько разных значений. Как лучше это записать? В каком виде?

Вот к примеру, небольшо пример.

Необходимо проверить переменную $myid, она всегда должна равняться 12, при этом переменная $mystatus может быть равна нулю или, например, 5.


if ($myid == 12 OR $mystatus == 0)
{
...
}

Как лучше записать такой код, с учетом того, что может быть несколько переменных, которые нужно проверить и все они могут иметь значения ИЛИ? А если $mystatus может иметь значения: 5, 7 и другие.

Стоит ли предварительно создавать массивы с возможными значениями и потом в условие проверять значение переменной на наличие его в массиве?

Вопрос с точки зрения удобоваримости кода. Не хочется быть говнокодером.

xinen
На сайте с 03.02.2010
Offline
4
#1

Не совсем понял суть вопроса, тем не менее, можно записывать так:

if ($myid == 12 || $mystatus == 0 || $var1 == 0 || $var2 == 0)

{

...

}

Пишу PHP-скрипты любой сложности, недорого! (/ru/forum/456209) DLE — "под ключ", создание модулей, установка шаблонов, парсеры и мн. другое. (/ru/forum/462426)
[Удален]
#2
Не совсем понял суть вопроса

Условие выполняется, если

$myid == 12 И

$mystatus == 0 ИЛИ $mystatus = 5 И

$var1 == 0 ИЛИ $var1 == 4 И

$var2 == 0 ИЛИ $var2 = 7

А если условие будет выполняться, когда $var1 и $var2 могут быть равны и 0 и 4 и 7 и 8.

Это ж целый забор из палок получится, а не код

DeveloperRu
На сайте с 27.02.2009
Offline
72
#3
Elles:
Условие выполняется, если
$myid == 12 И
$mystatus == 0 ИЛИ $mystatus = 5 И
$var1 == 0 ИЛИ $var1 == 4 И
$var2 == 0 ИЛИ $var2 = 7

А если условие будет выполняться, когда $var1 и $var2 могут быть равны и 0 и 4 и 7 и 8.
Это ж целый забор из палок получится, а не код

можете так попробовать

if (in_array($mystatus, array(0,4,7,8)) && $myid=12) {}

или так побыстрее

if (strpos(',0,4,7,8,', ','.$mystatus.',')!==FALSE && $myid=12)) {}

Ответы на вопросы (http://telenok.com)
FeoOne
На сайте с 27.12.2008
Offline
32
#4

if(($myid == 12) || ($mystatus == 0)) {
...
}
-
На сайте с 07.12.2005
Offline
97
-K-
#5

В данном случае за основами лучше всего обратиться к мануалу http://ru2.php.net/manual/en/language.control-structures.php

Но хочу предупредить для не допущения ошибок в дальнем - блок проверяется слева направо и заканчивается при получении верного или неверного условия, например:

if ($a == 5 || $b == 4) {

здесь при $а равном 5 значение $b проверяться не будет. На что это может повлиять, например у Вас такая конструкция

if ($a == 5 && $b = $this->getMaxSort()) {
здесь при $a отличном от 5 значение $b не вычисляется
M
На сайте с 11.06.2008
Offline
13
#6
Elles:

Вопрос с точки зрения удобоваримости кода. Не хочется быть говнокодером.

С точки зрения читабельности и понятности, лучше проверять на несоотвествие все условия по-очереди, и как только найдено несоответствующее - выходить из функции. Пример:


if ($myvar != 12 || $myvar != 7) { return false; }

if ($myvar2 != 1 || $myvar2 != 10 || $myvar2 != 15) { return false; }

if ( ... ) { return false; }

таким образом вы получите несколько проверок подряд, которые гораздо проще раскурить нежели вложенные if'ы, или, упаси бог, else

DeveloperRu
На сайте с 27.02.2009
Offline
72
#7
Megazoid:
С точки зрения читабельности и понятности, лучше проверять на несоотвествие все условия по-очереди, и как только найдено несоответствующее - выходить из функции.

если бы игры в подобном стиле программировались, вы до сих пор бы смотрели слайдшоу из-за потери производительности

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#8
С точки зрения читабельности и понятности,

Да мне как программисту глубоко на это наплевать.

Чем быстрее работает, тем лучше.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M
На сайте с 11.06.2008
Offline
13
#9
DeveloperRu:
если бы игры в подобном стиле программировались, вы до сих пор бы смотрели слайдшоу из-за потери производительности

ага, т.е. if..elseif...else работает на порядки быстрее? ))

Megazoid добавил 07.02.2010 в 18:21

LEOnidUKG:
Да мне как программисту глубоко на это наплевать.
Чем быстрее работает, тем лучше.

ну если вы пишите программу дома для себя, то на здоровье

а вот когда встанет вопрос коллективной работы над одним кодом, вот тогда и поматеритесь ))

DeveloperRu
На сайте с 27.02.2009
Offline
72
#10
Megazoid:
ага, т.е. if..elseif...else работает на порядки быстрее? ))

иногда и на несколько порядков, ведь по-вашему стилю, процессору придется отрабатывать на каждом IF не только лишние сравнения простых типов, но и лишние вызовы функций, каждая из которых может быть "тяжелой"

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий