Intereting Posts
Codeigniter Routes regex – использование тире в именах контроллеров / методов Диалоги Fb.UI отображаются в Popups вместо iframe Отобразить таблицу «неправильным» способом: перенести столбцы и строки? Невозможно запустить fpm с помощью phpbrew на Ubuntu file_get_contents возвращает 404, когда URL-адрес открыт с помощью браузера, и URL-адрес действителен Почему count (DOMNode-> childNodes) возвращает неверное количество детей? (PHP и XML) Пользовательская электронная почта не отправляется по заказу в WooCommerce Переменная контроллера не отображается в Query Builder Laravel PDO Microsoft Access Проверить, существует ли пользователь PHPDoc для свободного интерфейса в подклассе? PHPUnit RabbitMQ: написать тест для создания функции соединения Проблема с $ _POST, если isset () и mysql_fetch_assoc (): echo возвращает правильное значение, источник страницы всегда возвращает значение else Как проверить наличие параметра в URL-адресе? Обнаружение лиц в PHP

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

Есть ли какая-либо функция 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 ?>