Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Формальная логика
 
 автор: human   (16.11.2005 в 13:54)   письмо автору
 
 

Широко известен следующий текст (он растиражирован в двух толстенных книжках...:-)


     $browser = 'none';
      if(strpos($useragent, "MSIE")    !== false)
      if(strpos($useragent, "Opera")    == null)  $browser = 'msie';
      if(strpos($useragent, "Opera")   !== false) $browser = 'opera';
      if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
      // Выясняем операционную систему
      $os = 'none';
      if(strpos($useragent, "Win")      !== false) $os = 'windows';
      if(strpos($useragent, "Linux")    !== false
      || strpos($useragent, "Lynx")     !== false
      || strpos($useragent, "Unix")     !== false) $os = 'unix';
      if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
      // Выясняем принадлежность к поисковым роботам
      if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
      if(substr($useragent, 0, 9) == "Googlebot")     $os = 'robot_google';
      if(substr($useragent, 0, 6) == "Yandex")        $os = 'robot_yandex';
      if(substr($useragent, 0, 5) == "Aport")         $os = 'robot_aport';
      if(substr($useragent, 0, 6) == "msnbot")        $os = 'robot_msnbot';
      $search = 'none';
      // Выясняем принадлежность к поисковым системам
      if(strpos($reff,"yandex"))  $search = 'yandex';
      if(strpos($reff,"rambler")) $search = 'rambler';
      if(strpos($reff,"google"))  $search = 'google';
      if(strpos($reff,"aport"))   $search = 'aport';
      if(strpos($reff,"mail") && strpos($reff,"search"))   $search = 'mail';
      if(strpos($reff,"msn") && strpos($reff,"results"))   $search = 'msn';
      if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';

На первый взгляд - все замечательно. Более того, этот текст многократно проверен
сотнями (или тысячами) людей на работоспособность.
Но... За формальную логику (и здравый смысл) - обидно. Скажите, зачем заставлять
этот скрипт делать много ненужной и бесполезной работы ?
А ведь это влияет (хотя и несущественно) на скорость работы.

Ведь если операционная система - Windows, то она не может быть одновременно Unix'ом
Точно также как и Rambler не может быть одновременно Yandex'ом и т.д.
А если учесть, что по статистике подавляющее большинство броузеров - это IE,
а OS - это Windows, то понятно, что после выполнения первого поиска подстроки,
остальные поиски работают вхолостую.

Более разумным этот текст мог бы выглядеть, например, так:


     $browser = 'none';
      if(strpos($useragent, "MSIE") !== false  $browser = 'msie';
      else if(strpos($useragent, "Opera")   !== false) $browser = 'opera';
      else if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
      // Выясняем операционную систему
      $os = 'none';
      if(strpos($useragent, "Win")      !== false) $os = 'windows';
      else if(strpos($useragent, "Linux")    !== false
      || strpos($useragent, "Lynx")     !== false
      || strpos($useragent, "Unix")     !== false) $os = 'unix';
      else if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
      // Выясняем принадлежность к поисковым роботам
      if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
      else if(substr($useragent, 0, 9) == "Googlebot")     $os = 'robot_google';
      else if(substr($useragent, 0, 6) == "Yandex")        $os = 'robot_yandex';
      else if(substr($useragent, 0, 5) == "Aport")         $os = 'robot_aport';
      else if(substr($useragent, 0, 6) == "msnbot")        $os = 'robot_msnbot';
      else $search = 'none';
      // Выясняем принадлежность к поисковым системам
      if(strpos($reff,"yandex"))  $search = 'yandex';
      else if(strpos($reff,"rambler")) $search = 'rambler';
      else if(strpos($reff,"google"))  $search = 'google';
      else if(strpos($reff,"aport"))   $search = 'aport';
      else if(strpos($reff,"mail") && strpos($reff,"search"))   $search = 'mail';
      else if(strpos($reff,"msn") && strpos($reff,"results"))   $search = 'msn';
      else if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';


Этим примером мне хотелось сказать только об одном:
почувствуйте разницу между if - if и if - else if

   
 
 автор: cheops   (16.11.2005 в 14:16)   письмо автору
 
   для: human   (16.11.2005 в 13:54)
 

1) Снижается читабельность
2) Работа всё равно будет выполняться точно такая же, так как в 95%, а в ряде случаев и 99%
<?php
$search 
'none';
$search 'own_site';
?>

т.е. будут пропахиваться все условия - роботы и поисковики встречаются не так часто, как остальной народ, а отдельно взятый робот скажем StackRambler или отдельный поисковик, скажем yandex встречается ещё реже. Т.е. большую часть времени цепочки условий будут разворачиваться на полную катушку.

   
 
 автор: human   (16.11.2005 в 15:40)   письмо автору
 
   для: cheops   (16.11.2005 в 14:16)
 

Не буду спорить - авторам виднее. Кроме того, понятно, что написанное пером - топориком не вырубишь...:-)

Но тем не менее - с улучшением читабельности согласиться трудно (трудно, когда при чтении
спотыкаешься об алогизмы, вызывающие недоумение).
Со статистикой по операционкам и броузерам тоже не соглашаться довольно трудно (против фактов - не попрешь).
А что касается поисковиков и роботов, то у MICROSOFT, YANDEX, GOOGLE и нашего RTCOMMа активность очень высокая (реагируют на каждый чих)
и гораздо выше, чем у обычных посетителей.
Хотя, разумеется, это сильно зависит от конкретного сайта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования