@maiskiykot
Free coder

Какой смысл так упрощать запросы?

Попросили посмотреть один проект а там кругом подобные самописы:
isset($product_info['meta_h1'])?$product_info['meta_h1']?$product_info['meta_h1']:$product_info['name']:''


Это еще не самая длинная конструкция. Не совсем понял: что аффтар хотел сказать такими конструкциями? И работает ли это вообще? В одном месте выводится вот такой тег H1:

Гранулированный без добавокИван-чай гранулированныйИван-чай гранулированный ферментированный без добавок купить


Может ли это быть связано с такими конструкциями?
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
Забавно, что никто так и не понял вопроса.

В единственном экземпляре это будет банальный тернарный оператор.

А в удвоенном - это ужас, летящий на крыльях ночи, поскольку в том же мануале сказано,
Замечание:
Рекомендуется избегать "нагромождения" тернарных выражений. Поведение PHP неочевидно при использовании нескольких тернарных операторов в одном выражении:

И в итоге этот код скорее всего работает не так, как хотел автор. Если переписать на обычные условия, то получится такой код
if (isset($product_info['meta_h1'])) {
    if ($product_info['meta_h1']) {
        $out = $product_info['meta_h1'];
    } else {
        $out = $product_info['name'];
    }
} else {
    $out = '';
}

Логики я здесь не вижу.
Более осмысленным вариантом для меня было бы, "если $product_info['meta_h1'] не существует или пуста, то выводить $product_info['name']". То есть, все свелось бы к простому единственному тернарному оператору
!empty($product_info['meta_h1']) ? $product_info['meta_h1'] : $product_info['name'];

На вопрос же "зачем" ответ простой: от лени и головотяпства. Есть такой период в жизни каждого пользователя похапе, когда кажется, что чем короче ты напишешь, тем круче выглядит твой код... а потом, когда начинаешь читать свое произведение, из глаз начинает идти кровь.
Ответ написан
@procode
Разработчик
Это просто сокращенная нотация if-else

Лично я ее тоже не оч люблю - визуально мне проще с блоками иметь дело :)
Ответ написан
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Просто в одну строку запись.
Для понимания просто добавьте переносы строк
Условие
? Истина
: лож

P.s.
isset($product_info['meta_h1']) && isset($product_info['name'])
? $product_info['name']
: '';
Ответ написан
lukoie
@lukoie
Я обычно если мне надо проверить, просто пишу там же эхо 666,или в данном случае конкатенацию, и сразу поймете оно ли это.
Но скорей всего это оно и есть, похоже.
А зачем? Может даже случайно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы