Комментарии 47
Вот только про b'string' не понял.
после этого:
$object-->propertyначал подозревать подставу, а после этого:
[$a <= $b]всё стало на свои места и то только потому что видел такое один раз в продакшн коде, а некоторые из остальных бывает задают на собеседовании, когда не до чего докопаться.
Вот только про b'string' не понял.это единственный честный случай, этот оператор влияет только на PHP6, на остальные версии не влияет, потому что в них все строки — бинарные.
PS: автору надо бы добавить тег юмор, а то после тяжёлого рабочего дня можно прочесть статью и не понять, что это вовсе не специальные операторы, тем более что текст читается достаточно сложно.
Мы надеемся, что эти менее известные операторы научили вас кое-чему в PHP.
А также надеемся, что вы никогда не будете применять их в реальном проекте.
Он работает так, вы ожидаете, добавляя элемент на правой части в левую частью массива.
Простите, но перевод ужасен.
Не помешало бы еще раз пройтись по дословному переводу и слегка «олитературить» текст.
Поймите меня правильно, при переводе я хотел как можно точнее передать то, что написал автор в оригинале, такой дословный перевод, конечно, это кому нравится, поэтому и требует особого редактирования при публикации, но несмотря на мой провал, я буду стараться над качеством перевода, нужно, конечно, больше практиковаться, а если долгое время не выходит, то нужно заканчивать с переводом, так как, очевидно, это не моё, и лучше это не делать.
Всю эту мысль запихнуть в одно предложение — это ещё надо умудриться)
Он работает ожидаемо: добавляет то, что справа, в массив слева.
Жаль только качество перевода оставляет желать лучшего. Исправьте хотя бы явные орфографические ошибки.
Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.
Он работает так, вы ожидаете, то есть добавляя элемент с правой части в левую частью массива.И просто прочтите остальной текст — сами все увидите.
Насчет снятия с публикации — решайте сами. Я бы постарался довести перевод до нормального состояния.
> Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.
Это я сейчас изменил, дополнил но стало хуже. Может я слишком «дословно» хочу всё переводить и получается так? Вот вы как перевели это предложение: «Simply add a b before any string, and it will do nothing»?
> Он работает так, вы ожидаете, то есть добавляя элемент с правой части в левую частью массива.
Это я понимаю, так опять-таки автор написал, добавляется новый элемент -> в правую часть, т.е. в конец.
Вот вы как перевели это предложение: «Simply add a b before any string, and it will do nothing»?
"Просто добавьте b
перед любой строкой, и ничего не произойдёт".
Смысл тот же самый, а смотрится уже не так коряво.
Он работает так, вы ожидаете, то есть добавляя элемент с правой части в левую частью массива.
Этот перевод просто неверный, в оригинале написано про массив слева, а не про левую часть массива. Перевести всё вместе можно как "Он работает так, как вы и ожидаете — добавляет элемент справа в массив слева".
Просто добавьте b перед любой строкой, но это ничего сделает, словно строка обычным образом.Пришлось лезть в оригинал. Возможно, это случайный косяк, ибо в оригинале нет ничего, соответствующего концовке, но сама идея дословного перевода — в корне порочна. Русские фразы строятся совсем по-другому, в итоге ваша попытка максимально донести мысль приводит в точности к обратному, что мысль понять невозможно или сложно. Или всё понятно, но фраза выглядит коряво, неестественно.
Конкретных мест много, но пара штук для иллюстрации:
В самом деле, это намного более элегантно, чем $array[] = 'element';.В английском слово «more» присутствует исключительно потому, что таковы правила образования сравнительной степени многосложных слов. Но в русском-то такого правила нет, человек просто скажет «намного элегантнее».
Константы хороши и эффективны, пока вы не захотите больше свободы к их синтаксису.Вместо «вы захотите» обычно говорят «вам захочется». А «свобода к их синтаксису» вообще звучит непонятно. Хотя бы «больше свободы в их синтаксисе», а можно в данном случае отойти от следования оригиналу и сказать что-то вроде «пока вас не перестанут устраивать ограничения их синтаксиса».
Вообще, по вопросу о том, до какой степени нужно следовать оригиналу, ведутся яростные и нескончаемые битвы. Кто-то считает, что по возможности нужно повторять авторский текст. Кто-то убеждает, что главное — донести авторскую мысль, а текст может быть хоть задом наперёд (если это способствует главной задаче). А третьи уверены, что ключевым является восприятие, и надо строить перевод таким образом, чтобы русский человек получал те же эмоции и ассоциации, какие получил бы англоязычный человек, читая оригинал. Каждый переводчик в итоге сплавляет в себе из разных составляющих какое-то своё, уникальное мировоззрение, частично включающее в себя эти (и другие) точки зрения.
Главное, как я считаю, делать перевод таким, какой нравится самому себе. На будущее, лучше дать статье полежать хотя бы сутки, при этом совершенно не думать о ней (а думать о белой обезьяне). Потом свежим взглядом перечитать, воспринимая как что-то чужое, как работу конкурента, которого надо ткнуть носом во все ляпы и недочёты. А потом вспомнить, чья это работа на самом деле, и решить, а устраивает ли она в таком виде, как сейчас. Правда тут ещё нужно не скатиться в противоположность и не начать полировать до бесконечности…
Понял свою основную ошибку — переводить слишком дословно, мало уделяя внимания получившемуся результату, как он звучит по-русски, это проблема, но, думаю, решается опытом и непрерывным обучением, а опыта в написании вообще, у меня крайне мало по сравнению с остальными людьми.
Магия форматирования))
$arr = [
'key1' => 'value1',
'key2' > 'value2',
'key3' => 'key3',
];
curl передает. IDE не подсвечивает ошибки, да ее и нет — просто второй элемент будет логический — истина или ложь.
А тут еще больший зоопарк предлагается использовать.
А я вот, честно сказать, не понял, почему эта статья сначала попала в дайджест, а потом и в перевод. Ничего такого сверх остроумного я не углядел… Может, просто не выспался?:)
Оператор []=
Это не оператор, это автор неуч.
Все эти записи эквивалентны:
$a[] = 5;
$a[]=5;
$a []= 5;
$a [] = 5;
$a [ ] = 5;
$a
[
]
=
5
;
И делают одно и то же — добавляют элемент в конец массива.
php как и многие другие языки очень не прихотливы к количеству и наличию пробелов в некоторых местах
Это не оператор,
А как это тогда называется, если это не оператор? Это бинарный оператор, у которого два операнда — массивы, или я ошибаюсь?
php как и многие другие языки очень не прихотливы к количеству и наличию пробелов в некоторых местах
Разумеется, это очевидно, как следующий тест, если рассматривать каждое добавление отдельно друг от друга.
$array = [];
$array []= 'element'; // время выполнения - 219 мс
$array[] = 'element'; // время выполнения - 250 мс
$array[]='element'; // время выполнения - 187 мс
Ошибся, конечно, правый операнд не обязательно должен быть массивом.
P.S.
думаю, это крайне очевидно
Ну т.е. в отличии от других вариантов композиции операторов, представленных в статье.
Жаль, только не все варианты приведены в пример, на вскиду, оператор интервала: `1...3` или смайлика: `('hello'; ;)`
Я пытался донести что этому оператору не место в данном списке, он доступен с момента появления массивов.
Автор статьи просто переставил пробелы и назвал это чем-то странным. Переставляя пробелы можно кучу месть переделать в что-то странное, что я и показал примером.
PS ну да, очень громко и не так выразился, простите.
Можно методику тестирования? 200 мс (четверть секунды!) на добавление элемента — это какой-то трэш и крайне далеко от правды. Или это время вместе с запуском интерпретатора?
Нет-нет, Вы неверно меня поняли! Я вовсе не против переводов. И Ваш перевод совсем не вызывает отторжения. Есть огрехи, Вы готовы их исправлять — это замечательно. Продолжайте. Я именно про ценность оригинальной статьи. Она не показалась мне достойной включения в дайджест и перевода.
К сожалению, в официальном руководстве нет ни слова об этой замечательной возможности.Гм, правда? php.net/manual/ru/function.array-push.php
В документации, конечно, есть про оператор []=
, но не расписано, но вся суть в том, что пробелы влияют на время выполнения операции, как я показал в комментарии выше https://habr.com/post/412603/?reply_to=18709857#comment_18710621
Конечно, кто-то скажет, что это экономия на списках, для этого может это не так очевидно, но ясно одно — важность пробелов трудно переоценить.
$array = [];
$array []= '1';
$array[] = '2';
$array[]='3';
3 0 E > ASSIGN !0, <array> 5 1 ASSIGN_DIM !0 2 OP_DATA '1' 7 3 ASSIGN_DIM !0 4 OP_DATA '2' 9 5 ASSIGN_DIM !0 6 OP_DATA '3' 7 > RETURN 1
<?php
$a = 1;
https://habr.com/post/412603/
echo $a;
С подсветкой кода легко понять что к чему.
Странные операторы в PHP