Qué es: en PHP 5.3? [duplicar]
Posible duplicado: ¿Qué son los operadores PHP "?"and": "called and what do they do?
<?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:
- La constante DIR
- El ?: operator
- Funciones anónimas
¿Qué hace el número 2 con el ?: en PHP 5.3?
Además, ¿qué hacen ¿significa funciones anónimas? ¿No era eso algo que ha existido por un tiempo?
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
Desde PHP 5.3, es posible omitir la parte media del operador condicional. La expresión
expr1 ?: expr3
devuelveexpr1
siexpr1
se evalúa comoTRUE
, yexpr3
de lo contrario.
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 aexpr2
siexpr1
evalúa a TRUE, yexpr3
siexpr1
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
devuelveexpr1
siexpr1
se evalúa como VERDADERO, yexpr3
de lo contrario.
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
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).
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