Есть ли какая-либо функция assign-if-not-empty-else-assign-null в PHP?
Я ищу более чистую альтернативу следующим:
$variable = (!empty($item)) ? $item : NULL;
Это также было бы удобно, если бы я мог указать значение по умолчанию; например, иногда мне нужно «вместо» NULL.
Я мог бы написать свою собственную функцию, но есть ли собственное решение?
Благодаря!
EDIT: Следует отметить, что я стараюсь избегать уведомления о неопределенных значениях.
Re edit: к сожалению, оба генерируют уведомления о неопределенных переменных. Вы могли бы противостоять этому с помощью @
, я думаю.
В PHP 5.3 вы можете сделать это:
$variable = $item ?: NULL;
Или вы можете это сделать (как говорит майгар):
$variable = $item ? $item : NULL;
В противном случае нет, другого пути нет.
PHP 7 добавляет новую функцию для обработки этого.
Нулевой коалесцирующий оператор (??) был добавлен в качестве синтаксического сахара для общего случая необходимости использования тройной связи с isset (). Он возвращает свой первый операнд, если он существует, и не является 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);
Ну да, есть собственное решение для назначения значения или NULL, когда переменная была отключена:
$variable = $possibly_unset_var;
Если вы просто хотите подавить уведомление (которое ничего не решает или не делает код чистым), для этого также существует собственный синтаксис.
$variable = @$unset_var;
Я бы не рекомендовал это в производственной системе, но:
<?php //$value=1; $item=@$value ?:null; var_dump($item); // NULL ?> <?php $value=1; $item=@$value ?:null; var_dump($item); // 1 ?>