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