Тернарные операторы
?: Условный тернарный оператор
?: Условный тернарный операторВыражение (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