Возможный дубликат. Каковы операторы PHP «?» И «:», и что они делают?
С сайта http://twitto.org/
<?PHP require __DIR__.'/c.php'; if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; })) throw new Exception('Error'); $c(); ?>
Twitto использует несколько новых функций, доступных на PHP 5.3:
Что делает номер 2 с ?: В PHP 5.3?
Кроме того, что они подразумевают под анонимными функциями? Разве это не то, что существовало какое-то время?
?:
– форма условного оператора, которая ранее была доступна только как:
expr ? val_if_true : val_if_false
В 5.3 можно исключить среднюю часть, например expr ?: val_if_false
которая эквивалентна:
expr ? expr : val_if_false
Из руководства :
Начиная с PHP 5.3, можно исключить среднюю часть условного оператора. Expression
expr1 ?: expr3
возвращаетexpr1
еслиexpr1
значениеTRUE
иexpr3
противном случае.
Оператор ?:
– условный оператор (часто называемый тройным оператором):
Выражение
(expr1) ? (expr2) : (expr3)
(expr1) ? (expr2) : (expr3)
вычисляется какexpr2
еслиexpr1
значение TRUE иexpr3
еслиexpr1
оценивается как FALSE .
В случае:
expr1 ?: expr2
Выражение оценивается значением expr1
если expr1
истинно и expr2
противном случае:
Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression
expr1 ?: expr3
возвращаетexpr1
еслиexpr1
значение TRUE иexpr3
противном случае.
Смотри сюда:
Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Анонимные функции: Нет, они не существовали до 5.3.0 (см. Первую заметку ниже примеров), по крайней мере таким образом:
function ($arg) { /* func body */ }
Единственный способ – create_function()
, который медленнее, довольно громоздкий и подвержен ошибкам (из-за использования строк для определения функций).