O que é?: No Php 5.3? [duplicado
-
23-09-2019 - |
Pergunta
Possível duplicata: Quais são os operadores do PHP “?” e “:” chamado e como eles fazem?
A partir de http://twitto.org/
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
Twitto usa vários novos recursos disponíveis a partir do PHP 5.3:
- o Dir constante
- O operador
- Funções anônimas
O que o número 2 faz com o ?: no Php 5.3?
Além disso, o que eles querem dizer com funções anônimas? Não foi algo que existe por um tempo?
Solução
?:
é uma forma do operador condicional que estava disponível apenas apenas como:
expr ? val_if_true : val_if_false
Em 5.3 é possível deixar de fora a parte do meio, por exemplo expr ?: val_if_false
que é equivalente a:
expr ? expr : val_if_false
De manual:
Desde o PHP 5.3, é possível deixar de fora a parte do meio do operador condicional. Expressão
expr1 ?: expr3
retornaexpr1
E seexpr1
avalia paraTRUE
, eexpr3
por outro lado.
Outras dicas
o ?:
Operador é o operador condicional (frequentemente referido como operador ternário):
A expressão
(expr1) ? (expr2) : (expr3)
avalia paraexpr2
E seexpr1
avalia para VERDADE, eexpr3
E seexpr1
avalia para FALSO.
No caso de:
expr1 ?: expr2
A expressão avalia o valor de expr1
E se expr1
é verdadeiro e expr2
por outro lado:
Desde o PHP 5.3, é possível deixar de fora a parte do meio do operador ternário. Expressão
expr1 ?: expr3
retornaexpr1
E seexpr1
avalia para VERDADE, eexpr3
por outro lado.
Desde o PHP 5.3, é possível deixar de fora a parte do meio do operador ternário. Expressão expr1?: Expr3 retorna expr1 se o expr1 avaliar para true e expr3 caso contrário.
Funções anônimas: Não, eles não existiam antes de 5.3.0 (Veja a primeira nota abaixo dos exemplos), pelo menos dessa maneira:
function ($arg) { /* func body */ }
A única maneira era create_function()
, que é mais lento, bastante pesado e propenso a erros (devido ao uso de strings para definições de função).