PHP назначает первое не-нулевое значение
У меня есть три значения:
$a = null
$b = 3;
$c = null
(Я никогда не знаю, что будет null
: возможно, все они, возможно, ни один из них.)
После так называемой ленивой загрузки я попытался присвоить первое значение, отличное от нуля:
$d = $a or $b or $c;
(Это похоже на способ JavaScript var d = a || b;
(он назначит b, если нет a).)
Но в PHP это, похоже, не работает.
Я делаю это неправильно, или что это лучший и самый простой способ сделать это?
Ответы
Ответ 1
Вы можете использовать короткий тернарный оператор в PHP 5. 3+:
$d = $a ?: $b ?: $c;
Обратите внимание, что это делает тип принуждения, как в JS.
Обновление (PHP 7)
В PHP 7. 0+ вы бы сделали (называемый null coalescing
- больше информации):
$d = $a ?? $b ?? $c;
Ответ 2
Попробуй это...
$d = array_filter(array($a, $b, $c))[0]; //newer PHP only
или это:
$d = current(array_filter(array($a, $b, $c))); //warning about references
или это:
$tmp = array_filter(array($a, $b, $c));
$d = current($tmp); //most safe
Ответ 3
В PHP 7 вы можете использовать оператор "Null coalescing":
$d = $a ?? $b ?? $c;
Это задает первое ненулевое значение (или null, если оно отсутствует), как заданный вопрос.
В отличие от некоторых других ответов, он не будет сбиваться с помощью неявного литья типов, например,
$b = 0; $c = 1;
$d = $a ?? $b ?? $c;
echo $d;
выведет 0: он не будет возражать, что $ a не был установлен вообще и не будет проходить через $ b, даже если он набирает тип - false
.
Ответ 4
Если вы можете поместить переменные в массив, это может помочь:
$d = current(array_filter(array($a, $b, $c)));
или это может быть и apporach:
if(!empty($a)) {
$d = $a;
}
эта проверка может иметь значение для всех переменных, таких как $b
и $c
Ответ 5
в php вы можете сделать это следующим образом:
'<?php
$a = 1;
$b = null;
$c = null;
$d = $a ? $a:($b?$b:($c?$c:'null'));
echo $d;
?>'
Ответ 6
Вы можете попробовать:
$d = !is_null($a) ? $a : (!is_null($b) ? $b : $c);