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