Сокращение php кода с применением операторов

Присвоение значения нескольким переменным сразу

В одной строке можно присвоить одно и то же значение сразу нескольким переменным. 

$foo = $bar = $buz = 1;

Комбинированные операторы

Комбинированные операторы позволяют использовать значение переменной в выражении и сохранить результат в этой же самой переменной. 

// Обычная запись
$value = $value + 10;

// Запись с комбинированным оператором присваивания «+=»
 $value += 10;

Список комбинированных операторов:

  • += — оператор сложения;
  • -= — оператор вычитания;
  • *= — оператор умножения;
  • /= — оператор деления;
  • .= — оператор присоединения;
  • %= — оператор модуля и присваивания;
  • &= — оператор и;
  • |= — оператор или;
  • ^= — оператор исключающего или;
  • <<= — оператор сдвига влево;
  • >>= — оператор сдвига вправо;

Подробнее об операторах

Тернарный оператор (сокращение if… else)

Знакомую всем разработчикам конструкцию if..else можно сократить при помощи тернарного оператора. Тернарная операция состоит из трех операндов: [первый операнд — условие] ? [второй операнд] : [третий операнд]. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true, то возвращается второй операнд; если условие равно false, то третий.

Обычный  if..else:

$foo = 1;
$bar = 2;

if($foo < $bar){
      $baz = $foo + $bar;
}else{
      $baz = $foo - $bar;
}

return $baz;

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

$foo = 1;
$bar = 2;

$baz = $foo < $bar ? $foo + $bar : $foo - $bar;

return $baz;

После знака равенства идёт условие. После знака вопроса код в случае успеха, после двоеточия — код в случае провала.

Присвоение переменной, или исполнение кода внутри тернарного оператора:

($foo < $bar) ? ($baz = $foo + $bar) : '';

Тернарный оператор можно помещать в переменную:

$out = 'некий текст '.($foo == $bar ? 'успех' : 'провал');

Тернарные операторы могут быть вложенными:

$out = ($foo == 1) ? 'Успех' : ($bar == 1 ? 'Только bar = 1' : 'Провал');

Элвис

Бинарный оператор ?: — который возвращает первый операнд если он возвращает true, и второй в случае false. Свое имя он получил за схожесть с Элвисом Пресли, и потому что это слово похоже на else if

Обычный  if..else:

if($bar){
    $foo = $bar;
}else{
    $foo = $buz;
}

return $foo;

Элвис:

$foo = $bar ?: $buz;

return $foo;

Null-коалесцентный оператор (два знака вопроса — ??)

Начиная с php7 появилися новый оператор — два знака вопроса, идущие подряд без пробела — эта конструкция называется Null-коалесцентный оператор. Он решает достаточно распространенную проблему в PHP, когда надо присвоить значение переменной, которое присвоено другой переменной, но если последней переменной значение не было присвоено (isset), то присвоить некое явное значение по умолчанию.

До PHP 7 обычный  if..else:

if (isset($foo)) {
    $bar = $foo;
} else {
     // присваиваем $bar значение 'default' если $foo равен NULL
    $bar = 'default'; 
}

После выхода PHP 7:

$bar = $foo ?? 'default';

Можно использовать с цепочкой переменных:

$bar = $foo ?? $baz ?? 'default';

Оператор «космический корабль» 

Еще одно нововведение PHP7. Оператор «космический корабль» <=> позволяет проводить трехуровневое сравнение двух значений, позволяя понимать не только их равенство или неравенство, но и то, которое из них больше при неравенстве, возвращая 1,0 или -1.

switch ($bar <=> $foo) {
    case 0:
        echo '$bar и $foo равны';
    case -1:
        echo '$foo больше';
    case 1:
        echo '$bar больше';
}