![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
[8 июня 2009 г.] |
|
8 июня 1995 года, 14 лет назад, Расмус Лердорф выпустил первый публичный релиз технологии PHP/FI 2.0. И хотя современный PHP имеет весьма мало общего со старым PHP/FI, он по прежнему завоевывает популярность у программистов теми же самыми маркетинговыми средствами.
![]() |
Все, что написано в этой статье, мое личное мнение. Оно не претендует на абсолютную истинность, а является выражением наблюдений, сделанных за последнее десятилетие.
|
Во времена, когда появился PHP/FI, "стандартным" языком для Web являлся Perl, и его позиции были, казалось, несокрушимы. Именно на Perl был написан "родоначальник" PHP/FI, созданный изначально Расмусом.
Возникает вопрос: как же г-н Лердорф и компания сумели затмить величие Perl (имеющего к тому времени многолетнюю историю и множество поклонников) и вывести PHP/FI (а затем и PHP) на лидирующие позиции? Для этого они сделали три очень точных шага, а также выбрали оптимальное позиционирование продукта. Об
Под 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-
Итак, в ранних версиях PHP все аргументы GET и POST, приходящие в программу, автоматически превращаются в обычные переменные. Удобно ли это новичку? Конечно, очень!
Я впервые познакомился с PHP в 90-х годах. В те времена я программировал в Web на языке C++. Разбор QUERY_STRING, multiart-форм, простейшая система шаблонов, вызов sendmail через
Листинг 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 (
Только позже, через несколько лет, популярность получила мысль, что register_
Почему я считаю, что это именно пиар? Я сам очень люблю проводить "типовые" собеседования и задавал этот вопрос примерно 50 PHP-разработчикам. Подавляющее большинство из них знает, что включенный register_
Как вы думаете, какая самая частая страница, которую видят начинающие при разработке Web-приложений на C++, Perl и других языках? Это сообщение о 500-й ошибке сервера. Представьте себе новичка, знающего HTML и решившего, например, попробовать Perl. Что он увидит, написав свою первую программу? Ответ очевиден: 500-ю ошибку.
Формально, конечно, после этого нужно смотреть логи сервера. Но
И тут на сцену врывается PHP и display_errors, по умолчанию включенный на большинстве хостингов того времени. Вы знаете способ, как получить в PHP 500-ю ошибку? Я лично не знаю. Зато в случае малейшей проблемы в скрипте вы сразу же увидите в браузере, в чем дело. Наверное, display_
Кажется, что многие шаги в развитии PHP тщательно продуманы с маркетинговой точки зрения. Расмус и компания понимали: чтобы захватить рынок, нужно произвести фурор в головах новичков. Ведь все профессионалы через 5
За подтверждением не надо далеко ходить. Недавно вышел PHP 5.3 с одной скандальной возможностью: в него добавили оператор goto. Выше я писал, что register_globals=off является иконой, на которую молится орда начинающих без понимания смысла. (Кстати, другими такими иконами являются nginx и memcached, но только уже несколько в других кругах.) Так вот, оператор
Вот почему введение goto в
![]() |
Такой способ раскрутки давно известен и широко применяется в телерекламе. Вы наверняка много раз видели рекламные ролики, поражающие своим идиотизмом. Кто-то успокаивал себя тем, что "режиссер дурак", кто- |
Другая возможность PHP
Листинг 3 |
namespace my\name; ... $c = new my\name\MyClass(); |
Есть, конечно, официальное объяснение, почему был выбран именно обратный слэш. Но несмотря на все изложенные аргументы выбор по-прежнему остается весьма скандальным. Ведь в других языках (C++, Java) каким-то образом обходятся одним разделителем и для классов, и для пространств имен/пакетов...
Возможно, я ищу смысл там, где его в действительности нет... Лет через пять узнаем.
![]() |
|
Дмитрий Котеров |
8 июня 2009 г.
©1999-2018
|
|
Вернуться к оглавлению |