Qué es: en PHP 5.3? [duplicar]


Posible duplicado: ¿Qué son los operadores PHP "?"and": "called and what do they do?

De http://twitto.org/

<?PHP
    require __DIR__.'/c.php';
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
        throw new Exception('Error');
    $c();
?>

Twitto utiliza varias características nuevas disponibles a partir de PHP 5.3:

  1. La constante DIR
  2. El ?: operator
  3. Funciones anónimas

  1. ¿Qué hace el número 2 con el ?: en PHP 5.3?

  2. Además, ¿qué hacen ¿significa funciones anónimas? ¿No era eso algo que ha existido por un tiempo?

Author: Community, 2010-01-28

3 answers

?: es una forma del operador condicional que anteriormente solo estaba disponible como:

expr ? val_if_true : val_if_false

En 5.3 es posible omitir la parte central, por ejemplo, expr ?: val_if_false que es equivalente a:

expr ? expr : val_if_false

Del manual :

Desde PHP 5.3, es posible omitir la parte media del operador condicional. La expresión expr1 ?: expr3 devuelve expr1 si expr1 se evalúa como TRUE, y expr3 de lo contrario.

 126
Author: Ben James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-30 17:01:09

El operador ?: es el operador condicional (a menudo referido como el operador ternario):

La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 evalúa a TRUE, y expr3 si expr1 evalúa a FALSE.

En el caso de:

expr1 ?: expr2

La expresión evalúa el valor de expr1 si expr1 es verdadero y expr2 de lo contrario:

Desde PHP 5.3, es posible omitir la parte central del operador ternario. La expresión expr1 ?: expr3 devuelve expr1 si expr1se evalúa como VERDADERO, y expr3 de lo contrario.

 35
Author: Gumbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-30 18:30:35

Mira aquí:

Desde PHP 5.3, es posible omitir la parte media del operador ternario. Expresión expr1 ?: expr3 devuelve expr1 si expr1 se evalúa como VERDADERO, y expr3 en caso contrario.

Funciones anónimas: No, no existían antes de 5.3.0 (ver la primera nota debajo de los ejemplos), al menos de esta manera:

function ($arg) { /* func body */ }

La única forma era create_function(), que es más lenta, bastante engorrosa y propensa a errores (debido al uso de cadenas para definiciones de funciones).

 4
Author: Boldewyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-28 09:14:50