Что такое ?:в PHP 5.3?[дубликат]
-
23-09-2019 - |
Вопрос
Возможный Дубликат: Что такое операторы PHP “?” и “:” вызываются и что они делают?
<?PHP
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
throw new Exception('Error');
$c();
?>
Twitto использует несколько новых функций, доступных начиная с PHP 5.3:
- В РЕЖ постоянный
- Тот самый ?:оператор
- Анонимные функции
Что номер 2 делает с ?: в PHP 5.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()
, который медленнее, довольно громоздок и подвержен ошибкам (из-за использования строк для определений функций).