Что такое?: в 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:

  1. Постоянная DIR
  2. Оператор
  3. Анонимные функции

  1. Что номер 2 делает с ?: В PHP 5.3?

  2. Кроме того, что они подразумевают под анонимными функциями? Разве это не существовало какое-то время?

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

Другие вопросы по тегам