Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу).
Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Homepage Карта сайта Версия для печати

Джентльменский набор Web-разработчика   Ларри Уолл о Perl6   Наблы Система Orphus
 

55. Причины стремительного успеха PHP

[8 июня 2009 г.] обсудить статью в форуме

8 июня 1995 года, 14 лет назад, Расмус Лердорф выпустил первый публичный релиз технологии PHP/FI 2.0. И хотя современный PHP имеет весьма мало общего со старым PHP/FI, он по прежнему завоевывает популярность у программистов теми же самыми маркетинговыми средствами.

Лирическое отступление 
Все, что написано в этой статье, — мое личное мнение. Оно не претендует на абсолютную истинность, а является выражением наблюдений, сделанных за последнее десятилетие.

Во времена, когда появился PHP/FI, "стандартным" языком для Web являлся Perl, и его позиции были, казалось, несокрушимы. Именно на Perl был написан "родоначальник" PHP/FI, созданный изначально Расмусом.

Возникает вопрос: как же г-н Лердорф и компания сумели затмить величие Perl (имеющего к тому времени многолетнюю историю и множество поклонников) и вывести PHP/FI (а затем и PHP) на лидирующие позиции? Для этого они сделали три очень точных шага, а также выбрали оптимальное позиционирование продукта. Об этом — речь ниже.

Шаг 1. Embedded-синтаксис: PHP - продолжатель HTML?

Под embedded-синтаксисом я подразумеваю вот что:

Листинг 1
<html>
<body>
<?
echo "Hello, world! 5 + 2 = " . (5 + 2);
?>
</body>
</html>

Очень важно, что возможность поставляется "из коробки" и по умолчанию. Если где-то установлен PHP, он сразу же позволяет писать такие конструкции, и этим подчеркивается родство PHP и HTML в умах начинающих ("о, да это такой же HTML, только можно еще вставлять код!"). Таким образом, для тех, кто владеет HTML и хочет начать программировать для Web, выбор сразу же очевиден. И т.к. подавляющее большинство Web-программистов, которые имеются сейчас в мире, начинали свой путь с HTML, неудивительно, что PHP так популярен.

Чайник 

Конечно же, embedded-синтаксис существует и в остальных языках (Perl, Python, даже Java и т. д.). Но данный синтаксис в них недоступен "по умолчанию", приходится подключать разные библиотеки (а в худшем случае — целый фреймворк), что, конечно же, явяется огромным барьером на вход для новичков.

Обратите внимание, что профессиональные программисты на PHP не используют embedded-синтаксис, а предпочитают разделять код и шаблон страницы. Таким образом, очевидно, что embedded-синтаксис — средство завлечения новой аудитории, а не инструмент языка.

Шаг 2. Register_Globals: формы стали ближе

Итак, в ранних версиях PHP все аргументы GET и POST, приходящие в программу, автоматически превращаются в обычные переменные. Удобно ли это новичку? Конечно, очень!

Я впервые познакомился с PHP в 90-х годах. В те времена я программировал в Web на языке C++. Разбор QUERY_STRING, multiart-форм, простейшая система шаблонов, вызов sendmail через popen — все приходилось делать вручную. Тогда-то мне впервые показали вот такую программу:

Листинг 2
<html>
<body>
<form method="post">
  Как Вас зовут? <input type="text" name="name">
  <input type="submit">
  <?
    if ($name) {
      echo "<hr>Привет, $name!";
      mail("admin@example.com", "Hello", "Hello is said to $name");
    }
  ?>
</form>
</body>
</html>

Когда я убедился, что достаточно ЭТО положить на любой хостинг в hello.php и открыть в браузере, чтобы оно заработало, я был ошеломлен. Почему код внутри формы? Когда он вызывается? Откуда берется переменная $name? Ответы на эти вопросы заставили меня немедленно полюбить PHP и продолжить экспериментировать с ним. В итоге следующие три проекта я уже делал на PHP. Потом был еще Perl (на Perl работает, например, этот сайт), но неизменно я старался привнести в Perl те преимущества, которые имелись в PHP (результат — модули CGI::WebOut, CGI::WebIn, CGI::Embedder и др.).

Только позже, через несколько лет, популярность получила мысль, что register_globals — это плохо и небезопасно. Но в тому времени рынок уже был прочно занят PHP, и они могли себе позволить раскрыть данную идею. И хотя величина этой "небезопасности" несколько преувеличена, зато вопрос "хорошо ли использовать register_globals?" занимает одно из топовых место на типовых собеседованиях. Т.е. пиар устроили даже из отключения этой опции!

Почему я считаю, что это именно пиар? Я сам очень люблю проводить "типовые" собеседования и задавал этот вопрос примерно 50 PHP-разработчикам. Подавляющее большинство из них знает, что включенный register_globals — это плохо, но при этом не могут привести реальный (а не вымученный) пример связанной с ним дыры в безопасности! А можете ли привести такой пример вы? (Подсказка: проблемы связаны с массивами и использованием []-синтаксиса в формах.)

Шаг 3. Display_Errors: тащи ошибку в браузер!

Как вы думаете, какая самая частая страница, которую видят начинающие при разработке Web-приложений на C++, Perl и других языках? Это сообщение о 500-й ошибке сервера. Представьте себе новичка, знающего HTML и решившего, например, попробовать Perl. Что он увидит, написав свою первую программу? Ответ очевиден: 500-ю ошибку.

Формально, конечно, после этого нужно смотреть логи сервера. Но логи — они где? На сервере. Выкачивать их целиком по FTP (самый распространенный способ доступа на хостинг до сих пор) при каждой ошибке нереально, а про то, что такое SSH-доступ, знают лишь избранные. Добавьте сюда то, что в 90-е (и начало 2000-х) не было ни Денвера (или других подобных инструментов), ни даже PuTTY (вместо PuTTY был набор из кривых клиентов, половина из которых откровенно не работала). Был Apache для Windows, но судя по тому, какую популярность обрела в Интернете моя статья про его конфигурирование, эта тема так и осталась за семью печатями для большинства. Представьте себе на месте новичка. Что бы вы сделали? Я бы пошел пить чай.

И тут на сцену врывается PHP и display_errors, по умолчанию включенный на большинстве хостингов того времени. Вы знаете способ, как получить в PHP 500-ю ошибку? Я лично не знаю. Зато в случае малейшей проблемы в скрипте вы сразу же увидите в браузере, в чем дело. Наверное, display_errors — это самый удобный инструмент отладки, который существует в PHP за все времена.

Продолжение истории: goto в PHP 5.3

Кажется, что многие шаги в развитии PHP тщательно продуманы с маркетинговой точки зрения. Расмус и компания понимали: чтобы захватить рынок, нужно произвести фурор в головах новичков. Ведь все профессионалы через 5 лет — это сегодняшние новички. А уж когда ты хозяин рынка, можно потихоньку подтягивать к себе высокопрофессиональную аудиторию: достаточно создать всего пару высоконагруженных проектов на PHP или даже частично на PHP (я намекаю на Facebook), и дело в шляпе. Слово "PHP" уже давным-давно не является синонимом "медленный" (а вот тот же Ruby, например, так и не смог пока избавиться от этого штампа, хотя его медлительность сильно преувеличивают).

За подтверждением не надо далеко ходить. Недавно вышел PHP 5.3 с одной скандальной возможностью: в него добавили оператор goto. Выше я писал, что register_globals=off является иконой, на которую молится орда начинающих без понимания смысла. (Кстати, другими такими иконами являются nginx и memcached, но только уже несколько в других кругах.) Так вот, оператор goto — это икона, в 100 раз более сильная. Я не знаю ни одного программиста, который бы не слышал о якобы чудовищных разрушениях, связанных с этим оператором. Ненависть к goto вот уже лет 30 как вбивают во всех учебных заведениях мира.

Вот почему введение goto в PHP — грандиозный скандал. Почитайте в Гугле, сколько людей вовлечено в мире в переписку по поводу введения этого оператора в PHP. Казалось бы, антиреклама, но представьте себя опять на месте новичка, знакомого только с HTML. Вот он ходит по Интернету и натыкается то тут, то там на горячие дискуссии по поводу goto в PHP. Людям обычно интересна "желтуха", и со временем хочется узнать, а что же это вообще за зверь такой, PHP, раз о нем столько пишут. Заметьте, что новичку хочется узнать именно о PHP, а не о Perl, Ruby или Python, ведь в скандальных дискуссиях упоминается только PHP.

Чайник 

Такой способ раскрутки давно известен и широко применяется в телерекламе. Вы наверняка много раз видели рекламные ролики, поражающие своим идиотизмом. Кто-то успокаивал себя тем, что "режиссер дурак", кто-то — "наверняка кому-то эта реклама нравится". Но, я думаю, и те и другие ошибаются. Просто запоминается прежде всего эмоционально яркие и насыщенные вещи, независимо от того, позитивные это эмоции или отрицательные.

Другая возможность PHP 5.3 — пространства имен — также не обошлась без небольшого скандала. Дело в том, что разделителем для namespace-ов выбрали обратный слэш (\), и в результате ваш код начинает выглядеть вот так:

Листинг 3
namespace my\name;
...
$c = new my\name\MyClass();

Есть, конечно, официальное объяснение, почему был выбран именно обратный слэш. Но несмотря на все изложенные аргументы выбор по-прежнему остается весьма скандальным. Ведь в других языках (C++, Java) каким-то образом обходятся одним разделителем и для классов, и для пространств имен/пакетов...

Вместо заключения

Возможно, я ищу смысл там, где его в действительности нет... Лет через пять узнаем.

обсудить статью в форуме

 
Рекламный блок
   

На странице:
    55. Причины стремительного успеха PHP
     Шаг 1. Embedded-синтаксис: PHP - продолжатель HTML?
     Шаг 2. Register_Globals: формы стали ближе
     Шаг 3. Display_Errors: тащи ошибку в браузер!
     Продолжение истории: goto в PHP 5.3
     Вместо заключения

Важное объявление:
    автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apache действительно объясняет такое решение.

Орфография на «Куроводстве»:
    если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите — настолько быстро все произойдет.

На заметку:
    если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.

Параметры этой страницы
   
GZip

Ссылки от спонсоров
   


Дмитрий Котеров | 8 июня 2009 г. ©1999-2016 | Генеральный спонсор: Хостинг «Джино» | Контакт Вернуться к оглавлению