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

Их кадровик описал ему, каким образом происходит отбор; сначала Питер должен был ответить на отсеивающий вопрос, если он ответит удовлетворительно, его пригласят на собеседование. Немного поколебавшись, Питер сказал, что готов к вопросу. Он был уверен, что тот будет на какую-нибудь сложную незнакомую ему тему. Через два часа пришло сверхважное письмо с темой ВОПРОС НА СОБЕСЕДОВАНИЕ.

Он подвел курсор к письму, ожидая увидеть в нем что-то вроде: "на микроконтроллере PB349 по адресу 0xa9f00c находится инструкция MOV копирующая данные по адресу 0x8ad9da. Какой силы электромагнитное поле создаст 54-килобайтный модуль памяти при исполнении 600 следующих инструкций? У вас тридцать секунд".

Питер сделал глубокий вздох и открыл письмо. Вот точный вопрос, который он получил: «Опишите, что такое конкатенация, что она означает в PHP и каким образом вы ее использовали».

Питер был удивлен. На этот вопрос мог ответить любой, прочитавший книжку «программирование за 21 день». Труднее было рассказать, что такое умножение, и как он его использовал.

Тем не менее, он решил показать, что разбирается в сути вещей и написал подробный ответ.

Конкатенация, это процесс последовательного объединения нескольких фрагментов данных, обычно строковых литералов с нетекстовыми данными (как правило, переменными или другими литералами). Операторы конкатенации различаются в зависимости от языка. Например, JavaScript перегружает оператор сложения (+) поэтому он становится как оператором сложения, так и конкатенации. PHP использует в качестве оператора конкатенации точку (.).

В PHP конкатенация строк зачастую используется при составлении HTML документов для отправки их клиенту (браузеру). Это обычный прием в процедурно-ориентированном PHP коде. Впрочем, я должен отметить, что зачастую генерирование HTML кода при помощи конкатенации не эффективно, и может быть успешно заменено другим шаблоном проектирования – особенно если разработчик использует конкатенацию во время операции вывода (в этом случае разделение данных запятыми быстрее).

Конкатенация также широко применяется при генерировании динамических SQL запросов. Например, если бы у меня была CMS, в которой бы мне понадобилось выбрать все статьи, написанные определенным пользователем, код бы выглядел примерно так.

<?php
$sql = "SELECT article_id, article_body FROM Articles WHERE author_id = " . $User->getID() . " ORDER BY article_date DESC";
?>

Как видите, вышеприведенный фрагмент кода соединяет при создании SQL запроса три элемента.

  1. Фрагмент SQL кода.
  2. Идентификатор пользователя, полученный из объекта User.
  3. Фрагмент SQL кода.

SQL запросы редко создаются без каких либо динамических данных изменяющих их структуру, поэтому это очень распространенный способ использования конкатенации, я им пользовался практически во всех веб приложениях, которые я писал. Есть и другие примеры использования конкатенации, например генерация куков, сообщений об ошибках, заголовков электронных писем и динамических URL адресов.

Надеюсь, это достаточно подробно описывает конкатенацию, что она означает в PHP и мой опыт работы с этим элементарным оператором.

Питер отправил письмо и через несколько дней ему позвонили.

Питер: Алло?
Лиза: Здравствуйте, вы Питер? Это Лиза из Concatcorp.
Питер: О, здравствуйте! Рад вас слышать! Надеюсь у вас хорошие новости насчет работы.
Лиза: Эммм, да, но...
Питер: Но, что?
Лиза: Мы собираемся отдать эту вакансию другому соискателю.
Питер: Ясно... можно знать почему? Мне казалось, я довольно подробно ответил на вопрос...
Лиза: Да, в этом-то все и дело. К несчастью, они решили, что ваш ответ слишком хорош. Они думают, что вы откуда-то его списали. Мне очень жаль.

После этого Питер решил, что хуже без этой работы ему точно не будет.

Оригинал:http://worsethanfailure.com/Articles/Good-Answer-Perhaps-TOO-Good.aspx
Перевод:Евгений Виговский