Що таке PHP

Код

Чи хотіли б ви розібратися, як працюють вебсайти і що стоїть за динамічним контентом?

PHP – це мова програмування, яка використовується для створення динамічних вебсайтів та вебдодатків, обробки даних на сервері і взаємодії з базами даних.

У цій статті ми пояснимо основи PHP та розкажемо, як ефективно використовувати його у веброзробці.

Чому PHP одна з найкращих мов веб-програмування?

Розвінчуємо стереотипи, що набили оскому, і розбираємо основні фічі з останніх версій.

Судячи з їдких коментарів на форумах і публікацій в айтішних медіа, за PHP давно закріпилася репутація повільної, застарілої і місцями нелогічної мови програмування.

І хоча «споконвічний» і сучасний PHP – це практично дві різні мови, деякі критики, вправляючись у лихослів’ї, все ще відтворюють стереотипи двадцятирічної давності. У цій статті я хочу поміркувати, чому вони виникли і наскільки справедливі сьогодні.

Історія PHP

Перша версія PHP вийшла в далекому 1995 році. Данський програміст Расмус Лердорф написав і опублікував набір CGI-скриптів, які давали змогу відстежувати відвідування резюме в Мережі. Навряд чи Расмус припускав, що через 10 років на них працюватиме ¾ вебу.

Скрипти отримали назву Tools for Personal Home Page. Пізніше вона скоротилася до звичного PHP.

Досить швидко навколо PHP виросла спільнота користувачів, які полюбили його за відносну простоту. Але новому інструменту бракувало функціональності, тому його кілька разів переводили на новий движок. До п’ятої версії, коли основну частину дірок залатали, він еволюціонував у повноцінну мову веб-програмування.

Через високу швидкість релізів не всі оновлення виходили якісними. Звідси й виникли проблеми, які сформували образ мови на наступні десятиліття.

Технологічне відставання від конкурентів

PHP з’явився за часів, коли бал правили C/С++ і Java. Порівняно з ними молодій мові сильно не вистачало швидкості та функціональності. Крім того, core-команда недостатньо оперативно реагувала на свіжі тенденції, через що PHP довго залишався в ролі наздоганяючого.

На щастя, починаючи з сьомої версії відставання вдалося скоротити, і напрямок, у якому розвивається PHP сьогодні, вселяє велику надію. У наступному розділі я наведу приклади, які це підтверджують.

Брак стандартів і підтримки

У 1990-2000-х роках у PHP були серйозні проблеми зі стандартизацією. Нові версії відрізнялися від попередніх так сильно, що доводилося мало не вчити мову заново.

Ближче до виходу п’ятої версії сформувалося співтовариство, яке приймає всі нововведення шляхом голосування. Крім підтримки зворотної сумісності, вона розробляє рекомендації щодо стилю, вимоги до безпеки, інтерфейсів та інших аспектів. Загалом, відтоді мова стала більш стабільною і передбачуваною.

Нестрога типізація

Протягом життєвого циклу програми на PHP змінна може зберігати об’єкти будь-якого типу. Через це буває важко відловлювати помилки в коді.

Сьогодні багато розробників сходяться на думці, що типи змінних повинні вказуватися явно і тільки один раз – під час оголошення. Тому великою популярністю користуються мови із суворою типізацією, такі як TypeScript. Хто знає, може, недалекий той день, коли ми побачимо TypePHP 🙂

Незважаючи на те, що типізація в PHP динамічна й автоматична, розробники можуть задавати типи змінних під час оголошення полів класу. Крім того, у функціях можна вказувати тип значень, що повертаються, що сильно підвищує якість коду.

Низький поріг входження

Що? Так! Це той випадок, коли перевага технології є її недоліком. З одного боку, PHP багатьом відкрив двері у веб-розробку, давши змогу створювати сайти без глибоких знань у computer science. З іншого – через це у нас є мільйони рядків неоптимізованого коду, який доводиться підтримувати. Не виключено, що негативні відгуки про мову від деяких розробників – це результат роботи з поганим легасі.

Починаючи з «сімки» розвивається система стандартів і специфікацій PSR. Якщо їх дотримуватися, то код буде суворішим, а отже, і підтримувати його буде простіше.

Які фічі з’явилися в останніх версіях PHP

Сьогодні PHP – це не та забагована і повільна «пиха», якою її знали на початку 2000-х. Скрипти, написані на сьомій версії, працюють удвічі швидше за скрипти на PHP 5. У нових версіях з’являються механізми для підвищення відмовостійкості, швидкодії та читабельності коду. Розповім про найважливіші.

Стрілочні функції

Це скорочений спосіб оголошення функцій, який з’явився у версії 7.4.

Стрілочні функції дають такі переваги:

  • продуктивність програм підвищується, тому що стрілочні функції не створюють додаткових об’єктів і виконують менше операцій;
  • обсяг коду зменшується за рахунок більш лаконічного оголошення та визначення функцій;
  • підвищується читабельність коду (суб’єктивно).

Типізовані властивості, параметри методів і типи значень, що повертаються

Усе це з’явилося ще в сьомій версії. Коли ми явно вказуємо тип властивостей і параметрів, читабельність коду підвищується, а ймовірність помилки знижується. Розробнику не потрібно гадати, якого типу об’єкт зберігає ту чи іншу властивість і з якими об’єктами працює метод.

Наприклад, якщо навпроти властивості написано int, значить, вона зберігатиме тільки цілі числа, якщо string – рядки:

Іменовані аргументи

В останніх версіях PHP не потрібно запам’ятовувати порядок проходження аргументів у функціях. Замість цього можна явно вказувати їхні назви, що виключає виникнення прикрих помилок:

Оператор нульового злиття

Ще одне нововведення версії 7.0. Оператор нульового злиття повертає значення за замовчуванням, якщо змінна, яку намагаються прочитати, не визначена:

Оператор null-safe

У восьму версію додали оператор null-safe – він дає змогу перевірити, що об’єкт, у якого ми хочемо прочитати властивість, не дорівнює null.

Припустимо, ми хочемо дізнатися ім’я автора книги (об’єкт типу Book). Якщо в полі name є строковий об’єкт, то ми збережемо його у змінну і зможемо обробити. Якщо ж з якоїсь причини ім’я не задано, то у змінну запишеться null. Коли ми спробуємо зробити щось із null, програма викине виняток.

JIT-компіляція

Також у восьмій версії з’явилася just-in-time-компіляція, яка підвищує швидкість роботи скриптів. Ідея JIT-компіляції полягає в тому, що машина збирає код на льоту, причому транслює тільки ті фрагменти, які змінилися з минулого запуску.

Неіменовані винятки

Починаючи з восьмої версії можна винести обробку винятків в один блок catch.

Раніше, щоб перехопити виняток, потрібно було зберегти його у змінній, незалежно від того, використовували ви цю змінну чи ні:

PHP vs конкуренти

Основні конкуренти PHP у веб-розробці – Python, Ruby, Java і .NET. У кожного є свої переваги та недоліки.

Python

У Python простий синтаксис, величезна стандартна бібліотека і хороший інтероп із мовою C. А ще він ідеально підходить для роботи з big data. Але, як я вже говорив вище, PHP підтримують практично всі сервери і він виграє у швидкості простих обчислень.

На підтвердження наведу результати тестів алгоритму «Решето Аткіна», який використовується для пошуку простих чисел:

Мова програмування Час виконання, с Використання пам’яті, МБ
PHP 2,196 ± 0,023 44,15 ± 0,24
Python (CPython) 6,411 ± 0,043 45,74 ± 0,11
C++ (GCC) 0,213 ± 0,010 8,98 ± 0,07
Java 0,376 ± 0,026 189,23 ± 2,52
JavaScript (Node.js) 0,376 ± 0,026 10,13 ± 0,44
Ruby 2,815 ± 0,040 160,56 ± 0,09

Як видно з таблиці, Java виявився набагато швидшим і економічнішим, ніж PHP. Чемпіон за швидкістю і кількістю споживаної пам’яті – C++.

Java

На Java пишуть високопродуктивні та надійні додатки. Однак розробка на ній – справа складна і дорога. Та й джавістів сьогодні знайти непросто, тому що банки буквально пилососять ринок. Останнім часом PHP багато чого запозичує у Java. Скоро, наприклад, обіцяють завезти дженерики.

Що таке дженерики?

Дженерики – це колекції, які можуть містити об’єкти тільки одного типу. Вони безпечніші, ніж стандартні масиви PHP, які зберігають разом і числа, і рядки, і булеві значення, і багато чого ще.

Припустимо, є масив користувачів (об’єкти типу User) і в кожного користувача є «ім’я» (властивість name). Нам потрібно перебрати користувачів і отримати ініціали їхніх імен за допомогою функції get_initials. Без дженерика довелося б перевіряти тип кожного об’єкта на той випадок, якщо в масиві випадково виявиться об’єкт іншого типу. Якщо спробувати взяти ініціали від об’єкта undefined, то програма «впаде».

З дженериками така можливість виключається. Ще на етапі складання ми отримаємо помилку property of undefined, яка явно вкаже на те, що у функцію було передано некоректний аргумент. Тому код із помилкою не добереться до продакшена.

Ruby. Як і Python, Ruby має простий і зрозумілий синтаксис, але тести показують, що в деяких завданнях він поступається PHP за продуктивністю.

Який він, сучасний PHP

Сьогодні PHP – це сучасна мова програмування, що розвивається і підходить як для невеликих, так і для великих проектів. Насамкінець наведу основні причини, через які її варто вибрати як першу мову.

Доступність

Освоїти мову можна досить швидко, навіть без глибоких технічних знань. В інтернеті є безліч посібників, безкоштовних книг і курсів з PHP та WordPress, на яких можна навчитися працювати. За правильного підходу вже за тиждень можна створити простий блог або сайт, а за місяць – інтернет-магазин.

Великий набір фреймворків і CMS

На PHP написані WordPress, Joomla, Drupal та багато інших CMS на будь-який смак, кожна з яких має велику бібліотеку шаблонів і плагінів. Для складніших проєктів існують перевірені PHP-фреймворки: сучасний Laravel, консервативний, але надійний Symfony, а також Yii 2, хоча останній поступово втрачає популярність.

Підтримка більшості хостинг-провайдерів

Ваш проект працюватиме практично на будь-якому хостингу, без милиць і танців з бубном. Достатньо лише покласти index.php у кореневу папку.

Поширеність

Поширеність характеризує кількість користувачів технології. Згідно зі статистикою W3Techs, бекенд 76,8% усіх сайтів написаний на PHP – і це доводить, що він усе ще популярний.

На ринку багато PHP-програмістів, тому малому і середньому бізнесу простіше їх знайти. Розробка на «писі», як порівняти з тією ж Java, відбувається набагато швидше. І взагалі, якщо ви пишете сайт, що продає, або, скажімо, CRM, а не банківський застосунок, то вам не потрібен Java. Адже робити таке на Java – це все одно що кататися на «ламборджині» в селі: надто дорого і швидкістю особливо не похизуєшся.

«Інерція»

Хоч би як критикували мову PHP, всі знають про WordPress, на якому написані сотні тисяч магазинів і блогів. Чи варто експериментувати і пробувати щось нове, якщо бюджет і час обмежені?

Великі сервіси часто важко і дорого переводити на нові технології. Наприклад, щоб зберегти кодову базу, деякі компанії переписували рушій на PHP-подібні мови зі статичною типізацією.

Завдяки простоті та доступності PHP залишається незамінним інструментом для веб-розробників. Його широко використовують для створення блогів, сайтів, форумів та інших веб-додатків.

Для розробки високонавантажених систем PHP може бути не найоптимальнішим вибором.

Проте сучасні стандарти побудови архітектури веб-систем дозволяють використовувати PHP у зв’язці з мікросервісною архітектурою, написаною на Golang або Node.js. Це компенсує недоліки мови, водночас даючи змогу користуватися її перевагами. Така синергія забезпечує ефективну та гнучку розробку сучасних веб-додатків.

Висновок

PHP дозволяє створювати сайти з авторизацією, формами, інтеграцією баз даних, корзинами покупок та іншими динамічними елементами. Він легко поєднується з HTML, MySQL та багатьма фреймворками, такими як Laravel або Symfony.

Серед переваг – простий синтаксис, велика кількість документації, підтримка більшістю хостингів і активна спільнота. PHP – це стабільний вибір для тих, хто хоче швидко запускати ефективні вебпроекти.

Павлов Максим

Founder & CEO Onpage School

Оцініть автора
Onpage School