[Перевод] Странные операторы в PHP
Если вы не знаете ещё PHP-операторы, сперва изучите их, а потом вернитесь к прочтению этой статьи. Если вы прочитаете документацию по PHP, вы узнаете о массе операторов.
Я буду рад любой критики относительно качества перевода, особенно за любые улучшения. Судя по первым комментариям, хочу извиниться за плохой перевод, опыта у меня в этом мало, но хотелось перевести статью. Спасибо за внимание!
Действительно, некоторые из них просто читаются, например like
, в то время как некоторые из них — упущенная попытка сделать их читаемыми и скрыть их фактически двойную индивидуальность, например, xor. Операторы обычно состоят из странных символов, таких как !, -, =>, <=>, ^ or ~.
Поэтому я глубоко погрузился в ядро 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
, а целое число (в таком случае будет это будет работать как сравнение >
— прим. -->
работает как ->
, за исключением того, что это не так. пер.)
Все мы знаем оператор =>
для массивов, но они также поддерживают зеркальную версию этого оператора следующим образом:
$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-истребители
Следующий код вычитает 3 у $a
(в оригинальной статье написано, что оператор прибавит 3 (adds 3 to $a
), но это не так, см. Если вы хотите добавить огневую мощь к предыдущему флоту, вы можете вызвать истребителей типа X к источнику PHP: +-0-+
. пер.) вывод примера ниже — прим.
$a = 8;
$a = $a +-0-+ 3; // 5
Линейный корабль
Это один из операторов, работающий только с массивами, точно так же, как =>
. Оператор линейного корабля обеспечивает поддержку предыдущих операторов. Не стоит недооценивать его силу. Его следует использовать только самым продвинутым гуру PHP на этой стороне галактики.
$x = [ 2 <=['-']=> $b];
Разве не лучший способ написать так?
$x = [ 1 => $b];
Звезда Смерти
Есть планы на это, но никто никогда не видел реального экземпляра. Многие из вас бы спросили, а был ли встроен в PHP оператор "звезда смерти", и ответ таков: в данный момент неизвестно. Мне бы очень хотелось видеть оператор в три строки, так как PHP будет первым, кто будем иметь подобное (и, когда это произойдёт, надеюсь, не с моего счёта спишут стоимость этого оператора).
$x = $y ~~ ( °) ~~ true;
Безумие оператора PHP
Мы надеемся, что эти менее известные операторы научили вас кое-чему в PHP. Операторы PHP — аккуратные и эффективные.
2. Проверьте приведённые примеры кода: все они работают в PHP 7. Они могут иметь некоторые предварительные условия, поэтому обязательно прочитайте документацию перед их использованием. 5, кроме "звезды смерти".