Adoro fazer esse tipo de coisa no Perl: $foo = $bar || $baz
atribuir $baz
a $foo
if $bar
é vazio ou indefinido. Você também tem $foo ||= $bletch
que só irá atribuir $bletch
a $foo
se $foo
não estiver definido ou vazio.
O operador ternário nessa situação é tedioso e cansativo. Certamente, existe um método simples e elegante disponível em PHP?
Ou a única resposta é uma função personalizada que usa isset ()?
php
perl
operators
default-value
Tom Auger
fonte
fonte
//
e//=
existem a partir do Perl v5.10.0. O original||
e o||=
teste para o valor lógico, não para a definição.Respostas:
No PHP 7, finalmente temos uma maneira de fazer isso com elegância. É chamado de operador coalescente nulo . Você pode usá-lo assim:
Isso é equivalente a
fonte
<=>
e bastante precisa para inicializar!null
valor. Por exemplo, se$_GET['name']
estiver definido como uma string vazia, a primeira linha retornará uma string vazia, mas poderíamos retornar "john doe" usando$_GET['name'] ? $_GET['name'] : 'john doe'
.O PHP 5.3 possui um
?:
operador abreviado :Que atribui
$bar
se não for um valor vazio (não sei como isso seria diferente no PHP do Perl), caso contrário$baz
, e é o mesmo que esse no Perl e nas versões anteriores do PHP:Mas o PHP não possui um operador de atribuição composto para isso (ou seja, não é equivalente ao Perl
||=
).Além disso, o PHP fará barulho se
$bar
não estiver definido, a menos que você desative os avisos. Há também uma diferença semântica entreisset()
eempty()
. O primeiro retorna false se a variável não existir ou estiver definida comoNULL
. Este último retorna true se ela não existe, ou é definida como0
,''
,false
ouNULL
.fonte
The first returns
vez deThe second
em sua penúltima sentença.$var = isset($var) ? $var : 'default value';
Ele diz que na resposta ... apenas apontá-lo novamente para qualquer pessoa que o deslize. :-DObrigado por todas as ótimas respostas!
Para qualquer pessoa que venha aqui para uma possível alternativa, aqui estão algumas funções que ajudam a eliminar o tédio desse tipo de coisa.
Exemplos:
Tenho certeza que isso pode ser melhorado.
fonte
Um idioma comum para se manter compatível com versões mais antigas do PHP é:
Isso funciona para valores que podem ser avaliados no contexto booleano. A vantagem aqui é que ele também fornece o debug e_notice, caso a variável seja indefinida.
fonte
$bool ? $bool : "default"
se$bool
não estiver definido?isset($var) ? $var : DEFAULT
. Mas parece que ele quer evitá-los de qualquer maneira.No PHP anterior a 7. *, pode-se usar?: Para uma variável indefinida com erros suprimidos localmente com um
@
:fonte
esse é outro bom formato para o
isset
casoisset($foo) || $foo= $bar;
outra maneira simples e lhe dará mais controle, pois você pode adicionar mais condições e atribuir a outra variável ao mesmo tempo
$foo = (isset($oData['foo']))?$bar['foo']:'default value';
fonte
Uma solução possível: defaultFor ()
A menos que tenhamos uma solução de fábrica (que é realmente muito irritante), eu recomendaria o seguinte ajudante. Ele faz o trabalho na maioria dos casos:
Espero que isso seja próximo do que você queria alcançar. Não será emitido nenhum aviso se você o usar com uma variável inexistente, e é bastante conveniente. Certamente, ele tem uma desvantagem: o valor padrão sempre é calculado de antemão, portanto, não o use com nada pesado como segundo parâmetro, como um file_get_contents ou algo assim. Nesses casos, você está melhor com a emissão.
fonte