PHP: навигация
Некоторое время назад Илья Бирман написал про подсветку ключевых слов. В комментариях после моего замечания о возможности использовать функцию preg_replace развязалась небольшая дискуссия о том, как правильно нужно генерировать подобные вещи. Вот что писал Илья:
*_replace — это вообще не наш метод, надо сразу всё правильно генерировать, а не резать по живому потом.
…
А генерировать неправильный контент, чтобы потом его героически исправить — это левак, нужно сразу генерировать правильный.
Рассмотрим достоинства и недостатки различных подходов к генерации контента на простом примере навигационных ссылок.
Использование preg_replace позволяет сделать код коротким и понятным.
$cur_url = 'item2.htm';
$menu = '<a href="item1.htm">item1</a><br />
<a href="item2.htm">item2</a><br />
<a href="item3.htm">item3</a><br />
<a href="item4.htm">item4</a><br />
<a href="item5.htm">item5</a>';
$menu = preg_replace(
'#<a href="'.$cur_url.'">([^<]*)</a>#',
'<span>\\1</span>',
$menu);
Однако на мой взгляд этот код может быть расценен в соответствии с цитатой как «левак». Я не знаю, какой способ является правильным в этой ситуации с точки зрения Ильи, но могу предположить, что он должен быть примерно таким:
$cur_url = 'item2.htm';
$menu_array = array(
'item1.htm' => 'item1',
'item2.htm' => 'item2',
'item3.htm' => 'item3',
'item4.htm' => 'item4',
'item5.htm' => 'item5'
);
$menu = '';
foreach ($menu_array as $url => $link) {
if ($url != $cur_url)
$menu .= '<a href="'.$url.'">'.$link.'</a><br />';
else
$menu .= '<span>'.$link.'</span><br />';
}
Этот код является чуть более громоздким. К тому же, у метода не всё в порядке с производительностью. Проведенные тесты показали, что он примерно в три раза медленнее, чем предыдущий.
Можно применить и третий способ:
$cur_url = 'item2.htm';
if ($url != 'item1.htm')
$menu = '<a href="item1.htm">item1</a><br />';
else
$menu = '<span>item1</span><br />';
if ($url != 'item2.htm')
$menu .= '<a href="item2.htm">item2</a><br />';
else
$menu .= '<span>item2</span><br />';
if ($url != 'item3.htm')
$menu .= '<a href="item3.htm">item3</a><br />';
else
$menu .= '<span>item3</span><br />';
if ($url != 'item4.htm')
$menu .= '<a href="item4.htm">item4</a><br />';
else
$menu .= '<span>item4</span><br />';
if ($url != 'item5.htm')
$menu .= '<a href="item5.htm">item5</a>';
else
$menu .= '<span>item5</span>';
Он еще более громоздкий, да еще и избыточный. Хотя данный способ в полтора раза быстрее первого, в подобной ситуации я отдаю предпочтение использованию preg_replace.
Странности фотошопа
Я постоянно спотыкаюсь в фотошопе на этом окне нечеловеческого не принятого в Windows порядка кнопок.
Красота науки
Советую почитать статью «Красота науки»,
Советская газировка
Когда Лебедев написал, что в его кафе установлен советский аппарат с газированной водой, я решил, что должен обязательно сходить туда и вспомнить вкус из далекого детства. Однако этим летом у меня так и не получилось выполнить затею.
Сегодня проходил мимо центрального рынка в Кишиневе и увидел вот что:
Случайная прохожая загораживает именно советский аппарат с газированной водой! Я просто не мог не попробовать эту газировку с сиропом и не освежить воспоминания.
Как следовало ожидать, цена оказалась в 10 раз меньше, чем у Лебедева.
Противогазы
В аську спам пришел.
414241167 (01:20:25 26/07/2008)
АППЕТИТНАЯ БЛОНДИНКА
воплотит ваши фантазии по телефону
звони: ******
стоимость 95 р/мин 18+_________
Если вам мешает спам, поставьтеантиспам-фильтр.
«Если вам мешает дым от сигарет, ходите в противогазах», ага.
PHP и timestamp
На мой взгляд, функции time(), mktime(), date(), gmmktime(), gmdate() недостаточно хорошо описаны в документации. Легко запутаться при попытках понять, что же происходит в разных часовых поясах. Вот доходчивое объяснение (правда, на английском). Вкратце его суть в следующем. Метка времени (timestamp) фиксированного момента одна и та же для всех часовых поясов. Функции date() и mktime() преобразуют timestamp ко времени в часовом поясе, установленном на сервере, и обратно. Функции gmdate() и gmmktime() делают то же самое, но только для гринвичского времени.
С трехлетием, written.ru!
Да, это так. Как быстро летит время! Три года назад written.ru появился на просторах Интернета. Написал по этому поводу праздничную заметку номер 75.
Поздравления можно оставлять в комментариях.
Деньги
Почти всё делают деньги, почти все делают деньги.
Новые изобретения
Граф Ван де Граафа.
Поле
Вальс
Картинка
— Ты лучше назови источник картинки.
— майкрософт офис
— Тебе из офиса Microsoft картинку прислали?