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
?>