Строки "0" и "false" считаются FALSE
-y ( список ложных значений ) значений в PHP.
isset()
возвращает TRUE
для переменныхкоторые установлены, а не NULL
.empty()
проверит, что переменная установлена и не является значением FALSE
.Таким образом, он вернул бы TRUE
для "0".
Я думаю, что вам нужен ваш третий фрагмент кода, но с isset()
, а не empty()
.
Самый простой способ сделать (с наименьшим количеством скобок), который будет:
$get->var = isset($get->var) ? $get->var : (isset($setindb) ? $setindb : $default);
Поскольку сокращенное тенор возвращает первый параметр, вы не можете его использовать, потому чтобудет логическим(isset($get->var) ?: $default
вернул бы TRUE
, FALSE
или $default
, но никогда не значение $get->var
.)
Редактировать: Возможно, вы хотите что-то вроде функции объединения?Насколько я знаю, PHP не предлагает его изначально, но его создание тривиально.Обратите внимание, что это может быть немного уродливо из-за использования передачи ссылок на функцию.Я был бы заинтересован в комментариях по этому поводу (это так же плохо, как я думаю?).
function coalesce(array $values)
{
foreach($values as &$value)
{
if(isset($value))
return $value;
}
return null;
}
$this->var = coalesce(array(&$this->var, &$setindb, $default));
Я не проверял выше.Передайте переменные в массиве как ссылки (&
символ).Я почти уверен, что он захлебнется чем-то вроде coalesce(array(1,"a_string",false));
.