Питер Б. был безработным PHP-разработчиком, ищущим работу в начале 2005 года. Ему прислали по емейл некую информацию о компании, предлагающую вакансию, которая могла его заинтересовать. Прочитав описание работы, Питер заинтересовался, и поэтому он отправил свое резюме. Ответ он получил несколькими днями позже. Менеджер по найму сей компании описал типичный процесс проверки кандидатов: Питер должен был ответить на проверочный вопрос, чтобы подтвердить свой уровень, и если его ответ получался удовлетворительным, они договаривались об собеседовании. С небольшим волнением Питер ответил, что он готов к проверке. Он ожидал, что это будет комплексный вопрос, с которым он не был бы очень хорошо знаком. Через несколько часов пришел емейл с темой “ПРОВЕРОЧНЫЙ ВОПРОС” и с флагом - Очень Важно.Он навел мышку на емейл, ожидая увидеть вопрос в духе “на микропроцессоре PB349, если адрес памяти 0xa9f00c содержит инструкцию MOV на адрес памяти 0×8ad9da, какова будет магнитная сила создаваемая модулем памяти в 64Кб в течении следующих 600 инструкций? У вас 30 секунд.” Питер сделал глубокий вдох и кликнул на емейл. Вот точный вопрос, который был в письме: “Опишите что такое конкатенация, как она применяется в PHP, и как вы ее использовали в прошлом.”
Питер был удивлен. Это был вопрос, на который любой человек, с базовыми познаниями в любом современном языке программирования, мог легко ответить. Это было не сложнее чем дать ответ на вопрос: что такое умножение и как его использовать.
Однако, Питер хотел показать что понял суть. Он написал детальный ответ.
Конкатенация - это процесс объединения множественных частей данных, обычно литерных строк с нестроковыми данными (чаще всего - переменные либо строки). Оператор конкатенации различен в разных языках программирования. Для примера, в Javascript используется знак плюс (+), который также применяется в арифметическом операторе “сложение”. PHP использует знак точки (.) в качестве оператора конкатенации.
Конкатенация строк часто используется в PHP для построения HTML для вывода клиенту (в браузер). Это обычно для основанного на процедурах PHP-кода. Однако, Я должен заметить, что иногда использование конкатенации для генерации HTML неэффективно, либо может быть лучше обработано другими способами - например когда разработчик использует конкатенацию в паре с оператором “echo” (в данном случае, разделение запятыми токенов будет работать быстрее).
Другой частый случай использования конкатенации строк - генерация динамических SQL запросов. Для примера, если у меня есть CMS, которой нужно вывести все статьи, написанные определенным пользователем, код мог бы выглядеть примерно так:
$sql = “SELECT article id, article body FROM Articles WHERE author id = ”. $User->getID(). ” ORDER BY article date DESC”;
Как вы можете видеть, вышеприведенный код состоит из трех частей, которые вместе составляют цельный SQL запрос.
- Фрагмент SQL
- ID пользователя, который берется из объекта User
- Фрагмент SQL
SQL запросы редко генерируются без использования разного сорта динамических данных, так что это очень частая задача, которую я использовал практически во всех веб-приложениях, написанных мною. Другие простые примеры использования конкатенации включают: генерацию cookie, генерацию сообщений об ошибках, заголовков писем и создание динамичных адресов URL.
Я надеюсь, это в достаточной мере описывает конкатенацию в целом, ее реализацию в PHP, а также мой опыт использования этого оператора.
Питер оправил емейл, и через несколько дней раздался телефонный звонок.
Питер: Алле?
Лиза: Здравствуйте, это Питер? Это Лиза из Concatcorp.
Питер: О, здрасте! Рад вас слышать! Надеюсь у вас есть новости о работе.
Лиза: Ну…, да, но…
Питер: Хм?
Лиза: Мы решили отдать эту позицию другому кандидату.
Питер: Понятно… можно узнать почему? Мне казалось, я сделал хороший ответ на ваш проверочный вопрос…
Лиза: Ну, в этом все дело. Проблема в том, что нам кажется что ваш ответ был слишком хорош. Мы думаем что это был плагиат с вашей стороны. Я сожалею.
В тот момент Питер ясно представил себе, как ему хорошо без этой работы.
Реальные истории из сферы IT. http://worsethanfailure.com/
Оригинал на анлицком тут.
Перевод мой. =)