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:

  1. o Dir constante
  2. O operador
  3. Funções anônimas

  1. O que o número 2 faz com o ?: no Php 5.3?

  2. Além disso, o que eles querem dizer com funções anônimas? Não foi algo que existe por um tempo?

Foi útil?

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 retorna expr1 E se expr1 avalia para TRUE, e expr3 por outro lado.

Outras dicas

o ?: Operador é o operador condicional (frequentemente referido como operador ternário):

A expressão (expr1) ? (expr2) : (expr3) avalia para expr2 E se expr1 avalia para VERDADE, e expr3 E se expr1 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 retorna expr1 E se expr1 avalia para VERDADE, e expr3 por outro lado.

Olhe aqui:

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top