Сокращение php кода с применением операторов
Отредактировано: 18 Ноября 2024
Присвоение значения нескольким переменным сразу
В одной строке можно присвоить одно и то же значение сразу нескольким переменным.
$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 больше';
}