Muitas linguagens de programação possuem uma função de coalescência (retorna o primeiro valor não NULL, por exemplo ). PHP, infelizmente em 2009, não.
Qual seria uma boa maneira de implementar um no PHP até que o próprio PHP obtenha uma função de coalescência?
??
para PHP 7.Respostas:
Existe um novo operador no php 5.3 que faz isso:
?:
Fonte: http://www.php.net/ChangeLog-5.php#5.3.0
fonte
$input['properties']['range_low'] ?: '?'
array() ?: null ?: false
retornamfalse
. O operador é realmente são.O PHP 7 introduziu um operador de coalescência real :
Se o valor anterior ao
??
não existir ou fornull
o valor posterior ao??
obtido.A melhoria em relação ao
?:
operador mencionado é que ele??
também lida com variáveis indefinidas sem gerar umE_NOTICE
.fonte
($_GET['doesNotExist'] ?? null) ?: 'fallback'
?:
excesso??
, no entanto, é que ele une valores vazios, o que??
não funciona. Semelhante ao comportamento do operador OR lógico em JavaScript (ie$val || 'default'
), eu consideraria?:
uma forma mais prática de coalescer se, em nossa prática, finalmente nos encontrarmos lidando com vazio e nulo da mesma maneira (ie$val ?: 'default'
). E se você quiser forçar a questão ainda mais e engolirE_NOTICE
, você pode argumentar isso até:echo @$val ?: 'default';
Primeiro hit para "php coalesce" no google.
http://drupial.com/content/php-coalesce
fonte
Eu realmente gosto do operador?:. Infelizmente, ainda não foi implementado no meu ambiente de produção. Então, eu uso o equivalente a isso:
fonte
coalesce
deve retornar o primeiro argumento não nulo que encontrar, o que incluiriaFALSE
. Essa função descartaráFALSE
, provavelmente, não o que o op tem em mente (pelo menos não o que eu gostaria que fosse de umacoalesce
função).Vale a pena notar que, devido ao tratamento do PHP de variáveis não inicializadas e índices de matriz, qualquer tipo de função de coalescência é de uso limitado. Eu adoraria poder fazer isso:
Mas isso, na maioria dos casos, causa erro no PHP com um E_NOTICE. A única maneira segura de testar a existência de uma variável antes de usá-la é usá-la diretamente em empty () ou isset (). O operador ternário sugerido por Kevin é a melhor opção se você souber que todas as opções em sua coalescência são conhecidas por serem inicializadas.
fonte
$getstuff = $_GET+$_SESSION+array('id'=>null);$id=$getstuff['id'];
).??
para tornar essa operação muito comum mais concisa.Certifique-se de identificar exatamente como deseja que essa função funcione com certos tipos. O PHP possui uma grande variedade de verificação de tipo ou funções similares, portanto, saiba como elas funcionam. Esta é uma comparação de exemplo de is_null () e empty ()
Como você pode ver, empty () retorna true para todos esses itens, mas is_null () somente o faz para dois deles.
fonte
Estou expandindo a resposta postada por Ethan Kent . Essa resposta descartará argumentos não nulos que são avaliados como falsos devido ao funcionamento interno do array_filter , que não é o que uma
coalesce
função normalmente faz. Por exemplo:Para superar isso, é necessário um segundo argumento e definição de função. A função solicitável é responsável por informar
array_filter
se deve ou não adicionar o valor atual da matriz à matriz de resultados:Seria bom se você pudesse simplesmente passar
isset
ou'isset'
como o segundo argumento paraarray_filter
, mas não teve essa sorte.fonte
Atualmente, estou usando isso, mas gostaria de saber se não poderia ser melhorado com alguns dos novos recursos do PHP 5.
fonte
PHP 5.3+, com encerramentos:
Demo: https://eval.in/187365
fonte