Возможный дубликат. Каковы операторы 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() , который медленнее, довольно громоздкий и подвержен ошибкам (из-за использования строк для определения функций).