#php #arrays #associative-array #isset
Вопрос:
Существует ли в PHP какая-либо функция assign-if-not-empty-в противном случае-assign-null?
Я ищу более чистую альтернативу следующему:
$variable = (!empty($item)) ? $item : NULL;
Также было бы удобно, если бы я мог указать значение по умолчанию; например, иногда мне хотелось бы «»вместо » NULL».
Я мог бы написать свою собственную функцию, но есть ли собственное решение?
Спасибо!
ПРАВКА: Следует отметить, что я пытаюсь избежать уведомления о неопределенных значениях.
Комментарии:
1. !пусто($товар) amp;amp; ($переменная = $товар);
2. @Delta: Что тогда происходит со значением по умолчанию?
3. @Дельта, которая не работает, она не инициализируется
$variable
, когда$item
пуста.
Ответ №1:
Обновить
PHP 7 добавляет новую функцию для обработки этого.
Оператор объединения нулей (??) был добавлен в качестве синтаксического сахара для общего случая необходимости использования троичного в сочетании с isset(). Он возвращает свой первый операнд, если он существует и не равен НУЛЮ; в противном случае он возвращает свой второй операнд.
<?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(amp;$item, $default)
{
return (!empty($item)) ? $item : $defau<
}
Обратите внимание, что $item передается по ссылке на функцию.
Пример использования:
$variable = assignIfNotEmpty($item, $default);
Комментарии:
1. Ссылка необходима в определении функции, а не в вызове функции.
$variable = assignIfNotEmpty($item, $default);
все еще получает$item
по ссылке. Видишь php.net/manual/en/language.references.pass.php2. @elreimundo: Спасибо. Отредактированный.
Ответ №2:
Повторное редактирование: к сожалению, оба генерируют уведомления о неопределенных переменных. Я думаю , вы могли бы возразить этому @
, я думаю.
В PHP 5.3 вы можете сделать это:
$variable = $item ?: NULL;
Или вы можете сделать это (как говорит мегар).:
$variable = $item ? $item : NULL;
В противном случае нет, другого пути нет.
Комментарии:
1. Я не знал этого о PHP 5.3. Это, безусловно, чище!
2. Создает ли это (
?:
) уведомление, если оно не определено ?3. Иш, я тоже хотел бы это знать. Это то, чего я пытаюсь избежать.
4. @Иш Кумар: К сожалению, так оно и есть.
5. Я думаю
$variable = @$item ?: NULL;
, так было бы приятнее.
Ответ №3:
Ну да, есть собственное решение для присвоения значения или значения NULL, когда переменная была не установлена:
$variable = $possibly_unset_var;
Если вы просто хотите подавить уведомление (которое ничего не решает или делает код более чистым), для этого также существует собственный синтаксис.
$variable = @$unset_var;
Комментарии:
1. Это своего рода плохое решение (подавление ошибок), вам не кажется?
2. @Питер: Нет, я так не думаю. Уведомления появляются не просто так, а не как бессмысленная обида.
3. Это бедно. Php действительно нуждается в операторе подавления предупреждений.
Ответ №4:
Существует оператор присваивания с объединением null ( ??=
), который может быть полезен, если у вас есть значение параметра, допускающее значение null, и вы хотите установить значение по умолчанию, если оно равно null.
function foo(?string $bar): void
{
$bar ??= 'default';
}
Комментарии:
1. Доступно на PHP 7.4
Ответ №5:
Я бы не рекомендовал это в производственной системе, но:
<?php
//$value=1;
$item=@$value ?:null;
var_dump($item); // NULL
?>
<?php
$value=1;
$item=@$value ?:null;
var_dump($item); // 1
?>