👺
Cheatsheet
  • 👋My cheatsheet
  • 🐘PHP
    • Тернарные операторы
    • Замыкания в PHP
    • Таблица сравнения типов PHP
  • 🟨JS
    • JS cheat sheet
    • Тернарные операторы || ?? &&
    • Таблица сравнения типов JS
    • Область видимости в JS
    • Перебор объектов через for(key in obj)
    • Доступ к свойству через переменную []
    • this в JS
    • Конструктор, оператор "new"
    • bind привязка контекста (this)
    • Замыкания в JS ...
  • ❤️Laravel
    • Laravel websockets
    • Загрузка файлов и пути к ним
    • Vite сборка изображений
    • Vite сборка CSS и JS
    • Vite подключение jQuery
    • Vite подключение Bootstrap
    • Laravel AJAX (with jQuery)
    • Дерево категорий Laravel
    • Laravel + CK-Editor + El FInder
    • Laravel deploy
    • Laravel фасады и сервис провайдеры
    • Отношения
      • Один-к-Одному
      • Один-ко-Многим
      • Многие-ко-Многим
      • Полиморфные отношения
    • Laravel cheatsheet (MAIN)
    • Laravel cheatsheet (BIG)
      • Artisan
      • Auth
      • Blade
      • Cache
      • Composer
      • Config
      • Container
      • Cookie
      • DB
      • Environment
      • Event
      • Eloquent Model
      • File
      • Form
      • HTML
      • Helper
      • Input
      • Lang
      • Log
      • Mail
      • Pagination
      • Queue
      • Redirect
      • Request
      • Response
      • Route
      • SSH
      • Schema
      • Security
      • Session
      • String
      • URL
      • UnitTes
      • Validation
      • View
    • Laravel cheatsheet (BIG PLAIN)
  • 📕PDO
    • SELECT
    • WHERE
    • INSERT
    • UPDATE
    • DELETE
    • JOIN
    • GROUP BY
    • Дерево
    • Дерево ООП
    • Дерево в массив
  • 🐋Docker
    • Docker hub push
    • Docker offline
  • 🥤Gulp
  • 🌊jQuery
  • 🪄Composer
  • 4️⃣Composer PSR-4
  • 🍥RegEx
  • 🐙Git
  • 🧑‍💻Node js
  • 🛍️PHPStorm
  • 💻Zsh
  • 🤖Arduino
Powered by GitBook
On this page
  • ?: Условный тернарный оператор
  • ?? Оператор объединения с null
  1. PHP

Тернарные операторы

?: Условный тернарный оператор

Выражение (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

Выражение (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 1 year ago

🐘