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