Com base nos exemplos desta página , tenho os exemplos de código funcional e não funcional abaixo.
Código de trabalho usando if
declaração:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Código não funcional usando operador ternário:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
ATUALIZAÇÃO
Após a dica de Brian, descobri que as $test
saídas ecoando são o resultado esperado. O seguinte funciona como um encanto!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Respostas:
o
a sintaxe não é um operador "abreviação se" (
?
é chamado de operador condicional) porque você não pode executar o código da mesma maneira que faria:Em seu exemplo, você está executando a
echo
instrução quando o$address
não está vazio. Você não pode fazer isso da mesma forma com o operador condicional. O que você pode fazer, no entanto, éecho
o resultado do operador condicional:e isso exibirá "A rua está vazia!" se estiver vazio, caso contrário, exibirá o endereço street2.
fonte
condition ?: false
que avaliacondition
se é verdade?PHP 7
A partir do PHP 7, essa tarefa pode ser realizada simplesmente usando o operador Null coalescing como este:
echo !empty($address['street2']) ?? 'Empty';
fonte
$address['street2']
é uma string vazia. Ele vai aceitar e não vai voltar'Empty'
.isset() != empty()
. Isso só funcionará se o valor fornull
$address['street2']
não estiver vazia?echo $address['street2'] ?? 'Empty';
entretanto, como mencionado, é o “ operador de coalescência nulo ”, portanto, testa apenas para nulo e não vazio. Isto é porque ?? É efetivamente uma abreviação de isset ().Declaração básica verdadeira / falsa
Mensagem de boas-vindas condicional
Mensagem de itens condicionais
ref: https://davidwalsh.name/php-ternary-examples
fonte
)
está fora do lugar. Deve preceder o?
. A declaração completa deve ser$is_admin = ($user['permissions'] == 'admin') ? true : false;
O operador ternário é apenas uma abreviatura para bloco if / else. Seu código de trabalho não tem outra condição, portanto, não é adequado para isso.
O seguinte exemplo funcionará:
fonte
É o operador Ternário, também conhecido como operador Elvis (google it: P) que você está procurando.
Ele retorna o valor da variável ou padrão se a variável estiver vazia.
fonte
Observe que, ao usar operadores condicionais aninhados, você pode querer usar parênteses para evitar possíveis problemas!
Parece que o PHP não funciona da mesma maneira que pelo menos Javascript ou C #.
O mesmo código em Javascript e C # retorna "Excepcional" em ambos os casos.
No segundo caso, o que o PHP faz é (ou pelo menos é o que eu entendo):
$score > 10
? sim$age > 10
? não, então o atual$age > 10 ? 'Average' : 'Exceptional'
retorna 'Excepcional''Exceptional' ? 'Horrible' : 'Average'
que retorna 'Horrível', pois 'Excepcional' é verdadeDa documentação: http://php.net/manual/en/language.operators.comparison.php
fonte
Caminho rápido e curto:
Aqui estão alguns exemplos interessantes, com uma ou mais condições variadas.
fonte
Mensagem de boas-vindas condicional
Abreviação de PHP aninhada
fonte
Você pode fazer isso ainda mais curto, substituindo
echo
por<?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
Isso é útil especialmente quando você deseja determinar, dentro de uma barra de navegação, se a opção do menu deve ser exibida como já visitada (clicada) ou não:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
fonte
Acho que você usou os colchetes da maneira errada. Experimente isto:
Acho que deve funcionar, você também pode usar:
fonte
Eu acho que você provavelmente não deve usar o operador ternário no php. Considere o próximo exemplo:
Como você acha que
$a
variável conterá? (dica: dos) E permanecerá o mesmo mesmo se a$foo
variável for atribuída a 2.Para melhorar as coisas, você deve se recusar a usar este operador ou cercar a parte direita com colchetes da seguinte maneira:
fonte
Operador ternário é basicamente um atalho para a instrução if / else. Podemos usar para reduzir algumas linhas de código e aumentar a legibilidade.
Seu código parece mais limpo para mim. Mas podemos adicionar uma maneira mais limpa da seguinte maneira-
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Outra maneira-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Observação: adicionei colchetes a toda a expressão para torná-la mais limpa. Costumava fazer isso para aumentar a legibilidade. Com o PHP7 podemos usar o Null Coalescing Operator / php 7 ?? operador para uma melhor abordagem. Mas sua exigência não se encaixa.
fonte
Também há um operador ternário abreviado e se parece com isto:
(expression1)?: expression2 retornará expression1 se for avaliada como true ou expression2 caso contrário.
Exemplo:
retornará
Do Manual do PHP
fonte