Тернарные операторы
?:
Условный тернарный оператор
?:
Условный тернарный операторВыражение (expr1) ? (expr2) : (expr3)
интерпретируется как expr2, если expr1 имеет значение true
, или как expr3, если expr1 имеет значение false
.
$result = (2 > 1) ? 'если true' : 'если false';
//аналогично этому
if(2 > 1) {
$result = 'если true';
}else{
$result = 'если false';
}
Кророткий тернарный оператор (expr1) ?: (expr2)
$result = $var ?: '';
//аналогично этому
if($var) {
$result = $var;
}else{
$result = '';
}
Цепочка коротких тернарных операторов (?:
) вернёт первый аргумент, который оценивается как не ложное значение.
$res = 0 ?: 1 ?: 2 ?: 3; //1
$res = 0 ?: 0 ?: 2 ?: 3; //2
$res = 0 ?: 0 ?: 0 ?: 3; //3
??
Оператор объединения с null
??
Оператор объединения с nullВыражение (expr1) ?? (expr2)
вычисляется так: expr2
, если expr1
равен null
и expr1
в противном случае.
То же самое что и ?: но возвращает первый результат который не null. То есть вернёт даже false
, главное что бы не null
.
$res = 0 ?? 1 ?? 2 ?? 3; //0
$res = null ?? null ?? 2 ?? 3; //2
$res = false ?? 1 ?? 2 ?? 3; //false
Удобно использовать для определения дефолтного значения, если первый операнд равен null.
// если $_POST['action'] не равен null то вернёт его,
// а если равен null то вернёт 'default'
$action = $_POST['action'] ?? 'default';
// Пример выше аналогичен следующему коду
if (isset($_POST['action'])) {
$action = $_POST['action'];
} else {
$action = 'default';
}
Так же ?? можно использовать для проверки существования ключей массива, если таких ключей нету, то он присвоит следующуе значение и не вызовет ошибку.
// если таких эллементов нету в массиве $json, то вернёт "default"
// и не вызовет ошибку про то что нет таких ключей в массиве
$data = $json["thumbnail"]["source"] ?? "default";
// Пример выше аналогичен следующему коду
if (isset($json["thumbnail"]["source"])){
$data = $json["thumbnail"]["source"];
}else{
$data = "default";
}
Last updated