Множественные if – ветвление в php и if в if, когда кажется, что что-то много if?

12 3
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
500

Всем привет!

Возникла такая ситуация, ну и так как я не особо программист, короче у меня есть некое меню и там приходится чуть ли не на каждой строчки if делать и более того в if ещё одно if, в общем там сто if получается, но все работает и делает так как мне нужно и все ОК, но куча if немного смущает.

Вообще в целом для интерпретатора PHP эти if вложенные в if это большая проблема или это фигня для него и разбирается он с этим со скоростью света и меньше одной миллисекунды, не стоит на это вообще обращать внимание и делать столько if сколько хочешь хоть миллион или это не совсем так?

Заранее всем спасибо за ответы!


lealhost
На сайте с 07.06.2014
Offline
136
#1

Ничего страшного, больше на внешний вид влияет.

Некоторые условия можно заменить на тернарные операторы, "if elseif elseif else" можно заменить на switch.

Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#2

И таких строк 20, и может будет еще больше:

<?php if ( !is_post_type_archive('cptName') ) { if ( has_term( 'idCategory', 'termName' ) ) { echo ' class="className"'; } } ?>

У меня всего используется две WordPress’овские функции, как вы думаете тяжело ли это для PHP интерпретатора вычислять их по сто раз:

is_post_type_archive() — проверяет, является ли текущая страница архивом произвольного типа постов.

has_term() - Проверяет наличие у поста кастомных терминов, т.е. проверяет есть ли у поста метки/категорий/разделы (с учетом таксономии).

И еще хотел спросить, кажется из двух if я бы мог сделать одно if с логическим оператором AND, но не знаю будет ли это одно и тоже, трогать не охота т.к. пока и так работает.

Это все ради того, чтобы как-то в меню выделить элементы, когда ты в них находишься, а сделать это по-другому я не могу т.к. работа идет с кастомными типами постов и кастомными категориями, не стандартными.
lealhost
На сайте с 07.06.2014
Offline
136
#3
Dmitriy_2014 #:
кажется из двух if я бы мог сделать одно if с логическим оператором AND, но не знаю будет ли это одно и тоже

Никогда это не будет одним и тем же, только если родительское условие не исполняется всегда, а если оно исполняется всегда, то оно не нужно.

Если результат родительского условия дает false, то вложенный if  не выполнится и это плюс к производительности.

Если верить бенчмаркам, на выполнение условий if требуется от 40 до 65 микросекунд. На 100000 легких if'ов будет затрачено около 5 секунд. Больше влияет то, что в условии: насколько оптимизированная функция выполняется.

Dmitriy_2014 #:
как вы думаете тяжело ли это для PHP интерпретатора вычислять их по сто раз

Замерьте время выполнения и потом решите нормально он времени на это тратит или нет.

MP
На сайте с 18.05.2012
Offline
97
#4
Dmitriy_2014 #:

И таких строк 20, и может будет еще больше:

У меня всего используется две WordPress’овские функции, как вы думаете тяжело ли это для PHP интерпретатора вычислять их по сто раз:

is_post_type_archive() — проверяет, является ли текущая страница архивом произвольного типа постов.

has_term() - Проверяет наличие у поста кастомных терминов, т.е. проверяет есть ли у поста метки/категорий/разделы (с учетом таксономии).

И еще хотел спросить, кажется из двух if я бы мог сделать одно if с логическим оператором AND, но не знаю будет ли это одно и тоже, трогать не охота т.к. пока и так работает.

Это все ради того, чтобы как-то в меню выделить элементы, когда ты в них находишься, а сделать это по-другому я не могу т.к. работа идет с кастомными типами постов и кастомными категориями, не стандартными.

Нечитаемо. Сделай через функции. В меню часто используется рекурсия для обхода дерева.

А вообще - работает - не трожь. Поставь плагин для кэширования и забей. Когда изучишь php - тогда занимайся переписываем, а пока и так сойдет :)

MP
На сайте с 18.05.2012
Offline
97
#5
lealhost #:

Никогда это не будет одним и тем же, только если родительское условие не исполняется всегда, а если оно исполняется всегда, то оно не нужно.

Если результат родительского условия дает false, то вложенный if  не выполнится и это плюс к производительности.

Если верить бенчмаркам, на выполнение условий if требуется от 40 до 65 микросекунд. На 100000 легких if'ов будет затрачено около 5 секунд. Больше влияет то, что в условии: насколько оптимизированная функция выполняется.

Замерьте время выполнения и потом решите нормально он времени на это тратит или нет.

Вордпрес кривейшая CMS. Там про оптимизацию вообще не слышали. Как то залез под капот - ужаснулся, переписывал на SQL все сам. Но то надо было так... В большинстве случаев - кэш и еще раз кэш ))) Либо нафиг использовать ВП

totamon
На сайте с 12.05.2007
Offline
437
#6
Неуч #:
Вордпрес кривейшая CMS

все относительно... учитывая ее универсальность и поддержку старых версий это величайшая кривейшая цмс))

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#7
lealhost #:
Замерьте время выполнения и потом решите нормально он времени на это тратит или нет.

Не знаю насколько я правильно делаю замеры, но они получались смешные, с помощью функции timer_stop( 0 ).

В общем для пока что около 42 if’ов, показывает типа в среднем 0,001 сек., а то и просто 0 сек. ( И мне кажется если это правда то это вообще фигня, и я могу надобавлять ещё дофига if’ов, но это не точно )
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#8
Неуч #:
А вообще - работает - не трожь. Поставь плагин для кэширования и забей. Когда изучишь php - тогда занимайся переписываем, а пока и так сойдет :)
Я так и делаю, но куча if в if смотрится конечно убого, но зато все работает :)
temniy
На сайте с 15.03.2008
Offline
239
#9
<?php if ( !is_post_type_archive('cptName') ) { if ( has_term( 'idCategory', 'termName' ) ) { echo ' class="className"'; } } ?>

можно заменить на

<?php if ( ( !is_post_type_archive('cptName') ) && ( has_term( 'idCategory', 'termName' ) ) ) { echo ' class="className"'; }  ?>

можно заменить на тернарный

<?php echo ( ( !is_post_type_archive('cptName') ) && ( has_term( 'idCategory', 'termName' ) ) )  ?  ' class="className"'  :  ''; ?>
⭐ Лучший хостинг от 4 евро, VPS от 6 евро, VPN недорого - разные локации - любые карты - скидки до 20% - https://fornex.com/c/ffi2e3/ru/services/
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#10
temniy #:

можно заменить на

можно заменить на тернарный

Вот я тоже об этом думал, спасибо, использовать AND / && - чтобы убрать одно if. Главное чтобы это было одно и тоже, вместо двух if.
12 3

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