Вопрос

Возможный Дубликат: Что такое операторы 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. В РЕЖ постоянный
  2. Тот самый ?:оператор
  3. Анонимные функции

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

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

Это было полезно?

Решение

?: является формой условного оператора , который ранее был доступен только как:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top