Что такое PHP и почему его все ненавидят

История языка

Изна­чаль­но PHP рас­шиф­ро­вы­вал­ся как Personal Home Page Tools — инстру­мен­ты для созда­ния пер­со­наль­ных стра­ниц. Дело в том, что рань­ше, что­бы сде­лать функ­ци­о­наль­ный сайт, чаще все­го исполь­зо­ва­ли C, Perl и CGI-скрипты. Зву­чит слож­но, на деле — тоже слож­но. Един­ствен­ным спо­со­бом сде­лать что-то своё и не изу­чать при этом три тома по про­грам­ми­ро­ва­нию был PHP.

Язык HTML недо­ста­точ­но гиб­кий и уме­ет не так мно­го, как хоте­лось бы. Раз­ра­бот­чи­ки PHP реши­ли рас­ши­рить воз­мож­но­сти гипер­тек­ста и сде­ла­ли такой язык, кото­рый мож­но встра­и­вать пря­мо в HTML-код, что­бы они рабо­та­ли вме­сте. Для это­го исполь­зу­ют опе­ра­то­ры или <?PHP КАКОЙ-ТО КОД ?> или <? КАКОЙ-ТО КОД ?>.

Напри­мер, мож­но сде­лать так:

<?PHP $text_part = "этот код написан на PHP?"; //Задаём строковую переменную и сразу наполняем её текстом ?> <div> <p> Привет! А вы знаете, что <?PHP echo $text_part; ?> </p> </div>

В резуль­та­те на стра­ни­це полу­чит­ся строч­ка: «При­вет! А вы зна­е­те, что этот код напи­сан на PHP?»

Ещё мож­но созда­вать целые PHP-файлы и писать весь код там, а потом про­сто под­клю­чать эти фай­лы в нуж­ный момент. Полу­ча­ет­ся, что с PHP мож­но рабо­тать в двух режи­мах: писать код пря­мо в коде стра­ни­цы или выно­сить всё в отдель­ные фай­лы.

PHP — это просто

Имен­но про­сто­та это­го язы­ка при­нес­ла ему дур­ную сла­ву: слиш­ком мно­го появи­лось пло­хо­го кода, кото­рый на пер­вый взгляд рабо­тал хоро­шо. Посмот­ри­те сами: начать писать на PHP дей­стви­тель­но про­сто.

Ком­мен­та­рии и точ­ка с запя­той. Ком­мен­та­рии мож­но ста­вить в любом месте — доста­точ­но напи­сать два сле­ша под­ряд. А точ­ка с запя­той ста­вит­ся после каж­дой коман­ды — точ­но так же, как в С, Pascal, JavaScript и ещё в сот­нях дру­гих язы­ков.

Объ­яв­ле­ние пере­мен­ных. Что­бы объ­явить пере­мен­ную, нуж­но про­сто поста­вить знак дол­ла­ра, после него напи­сать назва­ние пере­мен­ной и при­сво­ить ей какое-то зна­че­ние.

$x = 5;
$y = $x+2;

Вывод на экран. В HTML-коде доста­точ­но вста­вить коман­ду echo, кото­рая поме­ща­ет текст в то место, отку­да вызва­ли коман­ду. Напри­мер, этот код пока­жет заго­ло­вок пер­во­го уров­ня с тек­стом «Заго­ло­вок, собран­ный на PHP»:

<? $h1_text = "Заголовок, собранный на PHP"; ?>
<h1> <? echo $h1_text; ?></h1>

И этот код сде­ла­ет то же самое:

<? echo "<h1>";
$h1_text = "Заголовок, собранный на PHP";
echo $h1_text;
echo "</h1>"; ?>

Ещё в PHP есть клас­сы и объ­ек­ты, авто­ма­ти­че­ское при­ве­де­ние типов (хотя мало кто пони­ма­ет, как оно там рабо­та­ет в слож­ных при­ме­рах) и мно­же­ство встро­ен­ных функ­ций, кото­рые упро­ща­ют раз­ра­бот­ку и помо­га­ют быст­ро писать код. А самое глав­ное — PHP сам застав­ля­ет рабо­тать любой код, если он хоть как-то напи­сан по пра­ви­лам язы­ка. Даже если внут­ри будет пол­ная чушь, но похо­жая на PHP-код — интер­пре­та­тор его ста­ра­тель­но выпол­нит, и, ско­рее все­го, мно­гое из это­го будет даже рабо­тать.

Для чего нужен PHP

Соби­рать стра­ни­цы из моду­лей. Если помни­те, PHP-код мож­но встра­и­вать в HTML-страницы, а мож­но сохра­нять как отдель­ные фай­лы. В этом слу­чае мы полу­ча­ем мини-модули, каж­дый из кото­рых отве­ча­ет за что-то одно. Напри­мер, в одном мы пишем, как будет выгля­деть шап­ка сай­та, в дру­гом — меню, тре­тий файл будет отве­чать за под­вал, чет­вёр­тый — за блок с отзы­ва­ми о това­рах.

Если у нас интернет-магазин и на каж­дой стра­ни­це това­ра нуж­но пока­зать шап­ку сай­та и под­вал, мож­но каж­дый раз про­пи­сы­вать это вруч­ную, а мож­но собрать на PHP. Для это­го доста­точ­но в теле стра­ни­цы напи­сать что-то такое:

<div>

<? include("/includes/header.php"); ?>

Тут можно вставить ссылку на модуль карточки товара или заполнить раздел информацией вручную. Но лучше модулем, как выше и ниже.

<? include("/includes/footer.php"); ?>

</div>

PHP возь­мёт файл header.php, в кото­ром мы напи­са­ли, как долж­на выгля­деть шап­ка сай­та, и поста­вит её в нача­ло стра­ни­цы. То же самое сде­ла­ет и с под­ва­лом — фай­лом footer.php, и так будет на каж­дой стра­ни­це това­ра. Полу­ча­ет­ся, что нам не нуж­но писать один и тот же код шап­ки и под­ва­ла на каж­дой стра­ни­це, доста­точ­но сде­лать это в одном месте, а потом под­клю­чать одной строч­кой.

Созда­вать CMS и движ­ки для сай­тов. Такие модуль­ные воз­мож­но­сти PHP при­ве­ли к тому, что боль­шин­ство совре­мен­ных систем управ­ле­ния кон­тен­том на сай­тах напи­са­ны на PHP. Смот­ри­те сами:

  • WordPress;
  • Drupal;
  • Joomla;
  • MediaWiki — для созда­ния вики-сайтов;
  • OpenCart — инстру­мент для интернет-магазинов;
  • phpMyAdmin — рабо­та с база­ми дан­ных.

Если вы на бес­плат­ном хостин­ге исполь­зу­е­те какой-то инстру­мент для созда­ния или под­держ­ки сай­та, ско­рее все­го, он тоже будет напи­сан на PHP.

Рабо­тать с фор­ма­ми и дан­ны­ми на стра­ни­це. HTML пло­хо уме­ет рабо­тать с фор­ма­ми и отправ­лять куда-то дан­ные, кото­рые вы вво­ди­те в поля реги­стра­ции. PHP справ­ля­ет­ся с этим гораз­до луч­ше: вы гово­ри­те, из како­го поля что нуж­но взять и по како­му адре­су отпра­вить, а всё осталь­ное интер­пре­та­тор дела­ет за вас.

Запо­ми­нать поль­зо­ва­те­лей и делать фор­мы авто­ри­за­ции. Если вам нуж­но быст­ро напи­сать свою фор­му реги­стра­ции на сай­те или запо­ми­нать посе­ти­те­лей даже без реги­стра­ции, то PHP — самый про­стой вари­ант реше­ния этой зада­чи. Един­ствен­ное, что нуж­но знать — как рабо­тать с база­ми дан­ных, где хра­нят­ся запи­си о поль­зо­ва­те­лях, пото­му что PHP это тоже уме­ет.

Почему все ненавидят PHP

По ста­рой памя­ти, когда ужас­но­го кода было мно­го. Про­сто­та вхож­де­ния в этот язык при­ве­ла к тому, что невоз­мож­но было нор­маль­но под­дер­жи­вать сайт, напи­сан­ный кем-то на PHP. Этот язык поз­во­лял рань­ше (сей­час мень­ше, но тоже есть) мно­го воль­но­стей с типа­ми дан­ных, пере­мен­ны­ми, обра­ще­ни­я­ми к базе дан­ных, поэто­му разо­брать­ся было почти нере­аль­но.

Кро­ме это­го, рань­ше в PHP было мно­го уяз­ви­мо­стей, через кото­рые мож­но залезть в базы дан­ных поль­зо­ва­те­лей или что-то поло­мать на сай­те. В новых вер­си­ях боль­шин­ство дыр уже устра­ни­ли, но тогда это ста­ло реаль­ной про­бле­мой.

Сме­шан­ный код. Писать в одном фай­ле на PHP и HTML мож­но, если у вас все­го одна фор­ма обрат­ной свя­зи. Но когда весь слож­ный код на PHP рас­пол­за­ет­ся по всей стра­ни­це, то это силь­но меша­ет разо­брать­ся, что же там про­ис­хо­дит на самом деле.

Любые пере­мен­ные в любом месте. Пона­до­би­лась новая пере­мен­ная? Объ­яви­те её на любом участ­ке кода и сра­зу бери­те в рабо­ту. Это удоб­но для пер­во­на­чаль­ной раз­ра­бот­ки, когда ты про­сто берёшь новую пере­мен­ную там, где она пона­до­би­лась, и дела­ешь с ней что хочешь. Но когда про­хо­дит вре­мя или кто-то дру­гой хочет разо­брать­ся в коде, то такой под­ход силь­но затруд­ня­ет рабо­ту.

Напри­мер, мож­но напи­сать так:

$a = 5+3;
$b = "Строка";
… много строк кода …
$a = 17 + $b;
$b = 21;

Когда новый про­грам­мист захо­чет понять, за что отве­ча­ют пере­мен­ные а и b, он най­дёт место, где они объ­яв­ля­ют­ся, и посмот­рит, како­го они типа и для чего исполь­зо­ва­лись вна­ча­ле. Но раз­ра­бот­чик мог в про­цес­се пере­ду­мать и начать исполь­зо­вать эти пере­мен­ные для дру­гих целей с новы­ми типа­ми дан­ных. Что­бы это понять, нуж­но про­смот­реть весь код и разо­брать­ся в логи­ке, а это дол­го и труд­но.

А ещё:

  • нет нор­маль­ной мно­го­по­точ­но­сти;
  • мало фрейм­вор­ков;
  • стран­ная рабо­та с объ­ек­та­ми и клас­са­ми;
  • нет кон­тро­ля и отлад­ки оши­бок.

Стоит ли учить PHP?

Зави­сит от зада­чи. Дело в том, что не менее 80% сай­тов уже сей­час рабо­та­ют на PHP: это зна­чит, что их нуж­но будет еще какое-то вре­мя под­дер­жи­вать. Ещё лет 5–10 спрос на PHP точ­но будет.

Одно­знач­но сто­ит учить PHP, если хоти­те рабо­тать с Ворд­прес­сом, Дру­па­лом, Джум­лой и дру­ги­ми извест­ны­ми систе­ма­ми управ­ле­ния сай­та­ми. Они напи­са­ны на PHP, и все над­строй­ки и допол­не­ния — тоже. Хоро­ший раз­ра­бот­чик WordPress сей­час на вес золо­та.

Будут ли веб-разработчики мас­со­во пере­хо­дить на дру­гие тех­но­ло­гии — вопрос откры­тый. Сей­час, если вы поку­па­е­те вир­ту­аль­ный хостинг, вам сра­зу вклю­ча­ют интер­пре­та­тор PHP, пото­му что все его исполь­зу­ют. А дру­гие тех­но­ло­гии типа Python или Node.js — не вклю­ча­ют, их нуж­но уста­нав­ли­вать отдель­но.

Но ведь и веб — это не навсе­гда. Ещё лет 20, и поня­тие веб-сайта может без­на­дёж­но уста­реть, пото­му что люди будут в при­ло­же­ни­ях, соц­се­тях или ещё где поху­же.

Навер­ное, ответ на вопрос такой: если вам до 20 лет, то уже не надо учить PHP. А если бли­же к 40–50 и вы хоти­те зани­мать­ся вебом — то опре­де­лён­но да.

Что дальше

В сле­ду­ю­щей серии попрак­ти­ку­ем­ся в PHP — напи­шем свой код для поль­зы дела или для раз­вле­че­ний.