Что такое?: В PHP 5.3?
Возможный дубликат: Что такое 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:
- Постоянная DIR
- Оператор?:
- Анонимные функции
-
Что делает номер 2 с ?: в PHP 5.3?
-
Кроме того, что они подразумевают под анонимными функциями? Разве это не то, что существовало какое-то время?
Ответы
Ответ 1
?:
является формой условного оператора, который ранее был доступен только как:
expr ? val_if_true : val_if_false
В 5.3 можно исключить среднюю часть, например. expr ?: val_if_false
, что эквивалентно:
expr ? expr : val_if_false
Из manual:
С PHP 5.3 можно исключить среднюю часть условного оператора. Выражение expr1 ?: expr3
возвращает expr1
, если expr1
оценивается как TRUE
и expr3
в противном случае.
Ответ 2
Оператор ?:
является условным оператором (часто называемым тройным оператором):
Выражение (expr1) ? (expr2) : (expr3)
оценивается как expr2
, если expr1
имеет значение TRUE, а expr3
, если expr1
имеет значение FALSE.
В случае:
expr1 ?: expr2
Выражение оценивается значением expr1
, если expr1
истинно и expr2
иначе:
С PHP 5.3 можно исключить среднюю часть тернарного оператора. Выражение expr1 ?: expr3
возвращает expr1
, если expr1
имеет значение TRUE и expr3
в противном случае.
Ответ 3
Посмотрите здесь:
С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Анонимные функции: Нет, они не существовали до 5.3.0 (см. первую заметку ниже примеров), по крайней мере, в следующим образом:
function ($arg) { /* func body */ }
Единственный способ был create_function()
, который медленнее, довольно громоздкий и подвержен ошибкам (из-за использования строк для определения функций).