PHP: Назначить, если не пусто?

#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.php

2. @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
?>