Речь пойдет о PHP, а не о том, что явствует из заголовка. Но внимательный читатель будет вознагражден оправданием этих ожиданий.
Вчерась довелось-таки заняться пересмотром того кода, что достался мне на работе в наследство. В первую очередь нужно было позатыкать дыры в безопасности. Не так уж и много и все во внутренних проектах, к которым снаружи нет доступа, но тем не менее...
По ходу дела наткнулся на такие перлы, что работать дальше стало просто невозможно. Я немного, как бы это выразиться, смеялся на рабочем месте, что заинтересовало начальника и коллег. В скором времени работа всего отдела была парализована и мы громко рассуждали, как можно «усилить» этот код.
Итак.
Вывод на страницу (общего пользования) списка для выбора даты. Сейчас нас интересует организация вывода названий месяцев:
Мы сейчас не станем заострять внимание на двойных кавычках, заставляющих парсер анализировать строку, не посмотрим на конкатенацию переменных (это при двойных-то кавычках!), вместо поочередного вывода.
«Нулевой месяц»! Вот, что достойно отдельного афоризма! Ну я уж не прошу по-другому организовать цикл и тем самым избавиться от лишних символов в интерпретируемом коде и сократить расход памяти. Но хотя бы прочитать мануал про массивы и жестко задать индекс первого элемента (array(1 => 'Январь', 'Февраль', ...)) можно было догадаться. Себе же проще.
«Нулевой месяц» и правила работы с циклом - должен помнить каждый.
Едем дальше. Индусы курят нервно в стороне.
Заказчик выбирает ближайшую дату, в которую он хочет отдать нам бабло. Но мы не так-то просты, немного усложним задачу. Давай, юзьверь, мы верим в тебя! Ты сможешь!
Надо отметить, что проект писан в 2009 году. Не так долго осталось ждать, и наступит 2011. Вопрос: сколько денег мы получим от заказчиков через этот проект в 2011 и последующих годах? Да нисколько! 2011-й не наступит никогда.
В обоих случаях мне интересен ход мысли автора кода. Честь ему и хвала хотя бы за то, что проекты написаны быстро и они работают. Это немаловажно! Но тем не менее, конкретно в этих местах: какие такие, я прошу прощения, месячные циклы мозга заставили написать выбор года через константы, если перед этим в коде была получена текущая дата? Неужели выдумывание сущности «Нулевого месяца» быстрее проставления первого индекса?
Понять идею и рассуждения другого человека всегда интересно. Ты готов простить ему все, если знаешь, как он рассуждал и из чего исходил, даже если ошибался. Ты благодарен ему уже хотя бы за непривычную мысль, за то, что ты сам в этом мире не одинок.
Понять - значит простить. (Фраза хорошая и полезная, но всегда нужно помнить, что область ее применения не распространяется на те случаи, когда ты пытаешься понять чужие мысли, которые выше твоего разума, опыта и навыков. Тут совсем другое понимание, которое порождает благодарность. В том или другом случае, понимание - самая важная вещь на свете, к которой нужно стремиться всегда. Она или смиряет твое чувство собственного превосходства, или заставляет тебя тянуться выше и «расти над собой».)
Ну и напоследок вопрос любителям географии :)
Сколько, по-вашему, в Российской федерации городов с одинаковыми названиями? Навскидку без подготовки тяжело ответить. Любители 1С полезут в Кладр.
Мне сегодня пришлось повспоминать, чтобы подтвердить свои самые страшные догадки. И я вспомнил: Троицк в Челябинской области и Троицк в Подмосковье. И точно! Лезем на сайт и смотрим, в каких городах страны можно заплатить нам деньги? В Троицке Челябинской области можно, а вот жители Подмосковья идет лесом стройными рядами, распугивая партизан. Почему? Потому что архитектор базы данных решил, что вполне себе сойдет такая структура таблицы городов России:
id_city varchar(255) // записывается из кладра насильно, это не автоинкремент id_region varchar(255) // здесь тоже на самом деле не более 3-х знаков, но мало ли: гулять так гулять! city_name varchar(255) unique // !!! ACHTUNG
Оп-па! При перезаписи таблицы в нее попадает только первый Троицк, а остальные игнорируются.