логический оператор, возвращающий операнды в PHP

В любом «нормальном» языке программирования, от C до Javascript, такое выражение, как a || b (или a or b), оценивается как a, если a истинно, и как b в противном случае, что делает возможными такие вещи, как a = params.a || default_a и подобные для оператора and, но PHP требует отличаются.

Есть ли способ получить это в PHP? Или существует какая-то «идиома/шаблон кодирования», которую программисты PHP используют вместо кода, подобного приведенному ниже?

$a = $my_a || $default_a; // nope, $a gets a boolean

Потому что написание if ($my_a) $a = $my_a; else $a = $default_a; или $a = $my_a ? $my_a : $default_a; кажется мне очень уродливым и нарушает базовую «сухость» кода, заставляя меня повторять что-то вроде $my_a, которое также может быть очень длинным и сложным выражением.

Я знаю, что это второстепенное дело, и не такое уж редкое в стране молоток с двойными когтями но он чертовски меня раздражает!


person NeuronQ    schedule 03.07.2012    source источник
comment
Вы просто разглагольствуете о php? Логические операторы работают в php так же, как и везде. А еще лучше просто используйте тернарный оператор php.net/manual/en/language. operator.comparison.php   -  person Mike S.    schedule 03.07.2012
comment
@МайкС. Я действительно не знал о поведении тернарного оператора по умолчанию, объясненном в ответе ниже.   -  person NeuronQ    schedule 03.07.2012


Ответы (1)


Стоит упомянуть: это C и Javascript, которые имеют значение, потому что «в« здравомыслящем »языке» (;)) возвращаемое значение логической операции является логическим, а не одним из ее операндов.

Однако

$a = $my_a ?: $default_a;
person KingCrunch    schedule 03.07.2012
comment
Начиная с PHP 5.3, можно опустить среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1, если expr1 принимает значение TRUE, и expr3 в противном случае. - person Mihai Stancu; 03.07.2012
comment
Тем не менее, есть много современных серверов с 5.2.x, стоит отметить, что только 5.3 позволяет это. - person Mihai Stancu; 03.07.2012
comment
@MihaiStancu Тогда вам следует сменить хостера. На дворе 2012 год. PHP5.2 больше не поддерживается, 5.3 вышла уже 3 года назад и даже 5.4 вышла. Пора... - person KingCrunch; 03.07.2012
comment
@MihaiStancu слава за версию попалась, хотя KingCrunch прав - person NeuronQ; 03.07.2012
comment
Он прав, но для небольших веб-проектов, где у клиента уже есть хостинг-провайдер и/или он заплатил авансом за год услуг хостинга, будет сложно объяснить, почему он должен менять хостинг-провайдера. - person Mihai Stancu; 03.07.2012
comment
На самом деле не стоит менять хостинг-провайдера из-за одной строки кода. Чтобы переключиться, потребуется гораздо больше времени, чем просто немного расширить эту линию. - person Lusitanian; 03.07.2012
comment
@David Кажется, ты не знаешь, что изменилось с 5.3. Это не просто одна строка кода. Дополнительно (я не могу упоминать об этом достаточно часто): Больше нет исправлений безопасности для 5.2! Больше никогда! Я даже не говорил, что надо использовать 5.4, только 5.3. 3 года. И так далее... - person KingCrunch; 03.07.2012
comment
@KingCrunch Я имею в виду просто проблему, поднятую в этом вопросе: если PHP 5.2 отлично работает для плаката, кроме этой проблемы, зачем менять хосты? Поверьте мне, я отказываюсь использовать что-либо ранее, чем 5.3, потому что я широко использую пространства имен и замыкания. - person Lusitanian; 03.07.2012