В начале 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 запроса три элемента.
- Фрагмент SQL кода.
- Идентификатор пользователя, полученный из объекта User.
- Фрагмент SQL кода.
SQL запросы редко создаются без каких либо динамических данных изменяющих их структуру, поэтому это очень распространенный способ использования конкатенации, я им пользовался практически во всех веб приложениях, которые я писал. Есть и другие примеры использования конкатенации, например генерация куков, сообщений об ошибках, заголовков электронных писем и динамических URL адресов.
Надеюсь, это достаточно подробно описывает конкатенацию, что она означает в PHP и мой опыт работы с этим элементарным оператором.
Питер отправил письмо и через несколько дней ему позвонили.
Питер: Алло?
Лиза: Здравствуйте, вы Питер? Это Лиза из Concatcorp.
Питер: О, здравствуйте! Рад вас слышать! Надеюсь у вас хорошие новости насчет работы.
Лиза: Эммм, да, но...
Питер: Но, что?
Лиза: Мы собираемся отдать эту вакансию другому соискателю.
Питер: Ясно... можно знать почему? Мне казалось, я довольно подробно ответил на вопрос...
Лиза: Да, в этом-то все и дело. К несчастью, они решили, что ваш ответ слишком хорош. Они думают, что вы откуда-то его списали. Мне очень жаль.
После этого Питер решил, что хуже без этой работы ему точно не будет.
Оригинал:http://worsethanfailure.com/Articles/Good-Answer-Perhaps-TOO-Good.aspx
Перевод:Евгений Виговский