Многие языки программирования имеют функцию Coalesce (возвращает первое значение , не NULL, пример ). К сожалению, в 2009 году PHP этого не сделал.
Что было бы хорошим способом реализовать его в PHP, пока сам PHP не получит функцию объединения?
Многие языки программирования имеют функцию Coalesce (возвращает первое значение , не NULL, пример ). К сожалению, в 2009 году PHP этого не сделал.
Что было бы хорошим способом реализовать его в PHP, пока сам PHP не получит функцию объединения?
??
для PHP 7.Ответы:
В php 5.3 есть новый оператор, который делает это:
?:
Источник: http://www.php.net/ChangeLog-5.php#5.3.0
источник
$input['properties']['range_low'] ?: '?'
array() ?: null ?: false
возвращаетсяfalse
. Оператор действительно вменяемый.В PHP 7 появился настоящий оператор объединения :
Если значение до
??
не существует или являетсяnull
значением после??
взятия.Улучшение по сравнению с упомянутым
?:
оператором заключается в том, что он??
также обрабатывает неопределенные переменные, не создаваяE_NOTICE
.источник
($_GET['doesNotExist'] ?? null) ?: 'fallback'
?:
over??
состоит в том, что он также объединяет пустые значения, чего??
не происходит. Подобно поведению логического оператора ИЛИ в JavaScript (то есть$val || 'default'
), я нашел бы?:
быть более практичной формой сливающимся , если в нашей практике мы в конечном итоге найти себя обработку как пустые и нуль таким же образом (то есть$val ?: 'default'
). И если вы хотите продвинуть проблему дальше и проглотитьE_NOTICE
, вы можете даже возразить:echo @$val ?: 'default';
Первое обращение по запросу "php coalesce" в Google.
http://drupial.com/content/php-coalesce
источник
Мне очень нравится оператор? :. К сожалению, это еще не реализовано в моей производственной среде. Поэтому я использую эквивалент этого:
источник
coalesce
он должен возвращать первый ненулевой аргумент, с которым он сталкивается, который будет включатьFALSE
. Однако эта функция отброситFALSE
, вероятно, не то, что op имеет в виду (по крайней мере, не то, что я хотел бы отcoalesce
функции).Стоит отметить, что из-за того, что PHP обрабатывает неитализированные переменные и индексы массивов, любые функции объединения имеют ограниченное применение. Я хотел бы иметь возможность сделать это:
Но в большинстве случаев это приведет к ошибке PHP с E_NOTICE. Единственный безопасный способ проверить существование переменной перед ее использованием - использовать ее непосредственно в empty () или isset (). Тернарный оператор, предложенный Кевином, - лучший вариант, если вы знаете, что все параметры в вашем объединении, как известно, инициализированы.
источник
$getstuff = $_GET+$_SESSION+array('id'=>null);$id=$getstuff['id'];
).??
чтобы сделать эту очень распространенную операцию более краткой.Убедитесь, что вы точно определили, как эта функция должна работать с определенными типами. В PHP есть множество функций проверки типов или аналогичных функций, поэтому убедитесь, что вы знаете, как они работают. Это пример сравнения is_null () и empty ()
Как видите, empty () возвращает true для всех из них, но is_null () возвращает только 2 из них.
источник
Я расширяю ответ, опубликованный Итаном Кентом . Этот ответ отбросит ненулевые аргументы, которые оцениваются как false из-за внутренней работы array_filter , что
coalesce
обычно не делает функция. Например:Чтобы преодолеть это, требуется второй аргумент и определение функции. Вызываемая функция отвечает за сообщение
array_filter
или нет , чтобы добавить текущее значение массива в массив результатов:Было бы неплохо, если бы вы могли просто передать
isset
или'isset'
в качестве второго аргументаarray_filter
, но не повезло.источник
В настоящее время я использую это, но мне интересно, нельзя ли его улучшить с помощью некоторых новых функций PHP 5.
источник
PHP 5.3+, с закрытием:
Демо: https://eval.in/187365
источник