PHP: Назначить, если не пусто?
Существует ли какая-либо функция assign-if-not-empty-else-assign-null в PHP?
Я ищу более чистую альтернативу следующему:
$variable = (!empty($item)) ? $item : NULL;
Это также было бы удобно, если бы я мог указать значение по умолчанию; например, иногда мне нужно "вместо NULL".
Я мог бы написать свою собственную функцию, но есть ли собственное решение?
Спасибо!
EDIT: Следует отметить, что я стараюсь избегать уведомления для значений undefined.
Ответы
Ответ 1
Update
PHP 7 добавляет новую функцию, чтобы справиться с этим.
Нулевой коалесцирующий оператор (??) был добавлен в качестве синтаксического сахара для общего случая, когда нужно использовать тройной в сочетании с Исеть(). Он возвращает свой первый операнд, если он существует, и не является NULL; в противном случае он возвращает свой второй операнд.
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
Оригинальный ответ
В итоге я просто создал функцию для решения проблемы:
public function assignIfNotEmpty(&$item, $default)
{
return (!empty($item)) ? $item : $default;
}
Обратите внимание, что $item передается по ссылке на функцию.
Пример использования:
$variable = assignIfNotEmpty($item, $default);
Ответ 2
Re edit: к сожалению, оба генерируют уведомления о переменных undefined. Вы можете встретить это с помощью @
, я думаю.
В PHP 5.3 вы можете сделать это:
$variable = $item ?: NULL;
Или вы можете это сделать (как говорит meagar):
$variable = $item ? $item : NULL;
В противном случае нет, другого пути нет.
Ответ 3
Ну да, есть собственное решение для назначения значения или NULL, когда переменная была отключена:
$variable = $possibly_unset_var;
Если вы просто хотите подавить уведомление (которое ничего не решает или не делает код чистым), для него также есть собственный синтаксис.
$variable = @$unset_var;
Ответ 4
Я бы не рекомендовал это в производственной системе, но:
<?php
//$value=1;
[email protected]$value ?:null;
var_dump($item); // NULL
?>
<?php
$value=1;
[email protected]$value ?:null;
var_dump($item); // 1
?>