Если вы прочитаете документацию по PHP, вы узнаете о массе операторов. Если вы не знаете ещё PHP-операторы, сперва изучите их, а потом вернитесь к прочтению этой статьи.


Судя по первым комментариям, хочу извиниться за плохой перевод, опыта у меня в этом мало, но хотелось перевести статью. Я буду рад любой критике относительно качества перевода, особенно за любые улучшения. Спасибо за внимание!

Операторы обычно состоят из странных символов, таких как !, -, =>, <=>, ^ or ~. Действительно, некоторые из них просто читаются, например AND, в то время как некоторые из них — упущенная попытка сделать их читаемыми и скрыть их фактически двойную индивидуальность, например, xor.


Вероятно, вы думаете, что знаете документацию PHP вдоль и поперёк, но всегда найдётся, чему поучиться. Поэтому я глубоко погрузился в код ядра PHP и посмотрел некоторые особенные операторы PHP, менее известные, но очень полезные в ежедневной работе.


Итак, вот 10 операторов PHP, которые вы должны знать в 2018 году!


Оператор b’


Просто добавьте b перед любой строкой, и ничего не произойдёт. Этот ловкий трюк работает только с b и B. Здесь мы должны напомнить о судьбе PHP 6, поскольку b похож на 6.


$string = b'content';

Оператор []=


Короткий оператор добавления нового элемента в массив. Он работает так, как вы и ожидаете — добавляет элемент справа в массив слева.


$array []= 'element';

В самом деле, это намного элегантнее, чем $array[] = 'element';. Некоторые тесты показывают, что это намного быстрее, в то время как другие наоборот, что это намного медленнее. Как обычно, посмотрите сами, подходит ли данный оператор вам, прежде чем делать ставку на производительность подобным трюком.


К сожалению, в официальном руководстве нет ни слова об этой замечательной возможности.


Оператор <-


Оператор "левого объекта" был введен в PHP для расширения возможности написания кода, для того чтобы разработчики могли писать PHP-код справа налево. Хотя позже проект был прекращён по непонятным причинам, этот первый оператор, получивший поддержку, сохранился в PHP.


$c = $a<-B; 

В целях обратной совместимости вышеприведённый код не получит значение свойства B в объекте $a, а просто сравнивает $a с противоположностьюB.


Оператор ––>


--> также известен как "оператор супер-объекта", создан на основе своего дальнего двоюродного брата, ->.


$object-->property

--> работает как ->, за исключением того, что это не так. Основная хитрость: использовать не объект в качестве переменной $object, а целое число (в таком случае будет это будет работать как сравнение > — прим. пер.)


Оператор "стрелки влево" для массивов [$a <= $b]


В��е мы знаем оператор => для массивов, но они также поддерживают зеркальную версию этого оператора следующим образом:


$array = [
    'a'  => 'b', 
    'c' <= 'd',
];

var_dump($array);
/*
array(2) {
  ["a"]=>
  string(1) "b"
  [0]=>
  bool(true)
*/

Это очень удобно для очень молодых программистов, а также тех, кто постарше, всё ещё использующих зеркальное написание. Этот оператор также имеет возможность превращать оба операнда в логическое значение, для более компактного хранения.


Имена констант с *, %


Константы хороши и эффективны, пока вам вам не захочется больше свободы в их синтаксисе. Хотя в руководстве указано, что имя константы должно содержать только буквы, символы подчёркивания и цифры, но также разрешено использовать специальные символы типа * или % в имени. Например, следующим образом:


// Далее три строки кода даны для пояснения того, что имел в виду автор статьи — прим. пер.
define('A', 2);
define('B', 1);
define('A*B', 2);

$x = foo( A*B );

Единственное, нужно убедиться, что константы A и B существуют, а в результате их умножения получается значение предполагаемой константы. Это ещё одна хорошая причина, чтобы избегать использование простых чисел в качестве значений в константах.


Операторы "кораблей"


Итак, все знают об операторе "космический корабль" <=> с момента выхода PHP 7. Но менее известно, что одновременно с этим релизом был введён целый флот космических кораблей для проведения крупномасштабных операций.


Крошечный космический корабль


Вы ��ожете предоставить эскорт оператору космического корабля, используя крошечный оператор космического корабля. Этот оператор не делает сравнение: он просто добавляет $b к $a в таком изысканном стиле.


$a -=- $b;

X-истребители


Если вы хотите добавить огневую мощь к предыдущему флоту, вы можете вызвать истребителей типа X к источнику PHP: +-0-+. Следующий код вычитает 3 у $a (в оригинальной статье написано, что оператор прибавит 3 (adds 3 to $a), но это не так, см. вывод примера ниже — прим. пер.)


$a = 8;
$a = $a +-0-+ 3; // 5

Линейный корабль


Оператор линейного корабля обеспечивает поддержку предыдущих операторов. Это один из операторов, работающий только с массивами, точно так же, как =>. Его следует использовать только самым продвинутым гуру PHP на этой стороне галактики. Не стоит недооценивать его силу.


$x = [ 2 <=['-']=> $b];

Разве не лучший способ написать так?


$x = [ 1 => $b];

Звезда Смерти


Многие из вас бы спросили, а был ли встроен в PHP оператор "звезда смерти", и ответ таков: в данный момент неизвестно. Есть планы на это, но никто никогда не видел реального экземпляра. Мне бы очень хотелось видеть оператор в три строки, так как PHP будет первым, кто будем иметь подобное (и, когда это произойдёт, надеюсь, не с моего счёта спишут стоимость этого оператора).


 $x = $y ~~
        ( °) 
         ~~  true; 

Безумие оператора PHP


Операторы PHP — аккуратные и эффективные. Мы надеемся, что эти менее известные операторы научили вас кое-чему в PHP.


Проверьте приведённые примеры кода: все они работают в PHP 7.2.5, кроме "звезды смерти". Они могут иметь некоторые предварительные условия, поэтому обязательно прочитайте документацию перед их использованием.