Pull to refresh

Странные операторы в PHP

Reading time 4 min
Views 41K
Original author: dams


Если вы прочитаете документацию по 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, кроме "звезды смерти". Они могут иметь некоторые предварительные условия, поэтому обязательно прочитайте документацию перед их использованием.

Tags:
Hubs:
+32
Comments 47
Comments Comments 47

Articles