Ответ 1
Эквивалентным оператором в PHP является ?:
, который является тернарным оператором без средней части:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a ?: $b
является сокращением для $a ? $a : $b
.
Во-первых, есть ли имя для этого выражения?
Javascript
var value = false || 0 || '' || !1 || 'string' || 'wont get this far';
value
равно string
(строка), а также пятый вариант
PHP
$value = false || 0 || '' || !1 || 'string' || 'wont get this far';
$value
равно true
(bool)
Правильно ли я думаю, что правильный способ достичь того же результата, что и JavaScript, - это вложение трёхмерных операторов? Какое лучшее решение?
Эквивалентным оператором в PHP является ?:
, который является тернарным оператором без средней части:
$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far';
$a ?: $b
является сокращением для $a ? $a : $b
.
Этот тест false || 0 || '' || !1 || true || 'wont get this far'
вернет логическое значение. Он вернет true
, если любое из значений true
, как работает OR
. Это не тернарное выражение, которое применяет первое допустимое значение к принимающей переменной.
Он возвращает 1
в PHP, потому что вы не произвели выражение как логическое.
Вы можете сделать это, чтобы выражение возвращало логическое значение вместо целого в вашу переменную PHP:
$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');`
Возврат будет true
.
Если вы используете PHP 5.3 или выше, см. отменить ответ.
В другом случае вы могли бы использовать вложенные регулярные тернарные операторы.
$value = ( false ? false : ( 0 ? 0 : ( '' ? '' : ( !1 ? !1 : ( 'string' ? 'string' : ( 'wont get this far' ? 'wont get this far' : null ))))));
Ух ты, уродливый.
Вместо этого вы можете использовать массив значений;
$array = array(false,0,'',!1,'string','wont get this far'));
Теперь создайте функцию, которая выполняет итерацию по массиву и возвращает первое истинное значение.
function array_short_circuit_eval($vars = array()){
foreach ($vars as $var)if($var)return $var;return null;
}
$value = array_short_circuit_eval($array);
echo $value; // string