PHP

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
PHP
PHP
Парадигма:імперативна, об'єктно-орієнтована, функціональна
Дата появи:1995
Творці:Расмус Лердорф
Розробник:The PHP Group
Останній реліз:7.3.3[1] (7 березня 2019; 109 днів тому)
Тестова версія:7.3.4RC1 (21 березня 2019; 95 днів тому)
Система типізації:динамічна, слабка
Під впливом від:Perl, C
ОС:крос-платформова
Ліцензія:PHP License
Сторінка інтернет:php.net

PHP (англ. PHP: Hypertext Preprocessor — PHP: гіпертекстовий препроцесор), попередня назва: Personal Home Page Tools — скриптова мова програмування, була створена для генерації HTML-сторінок на стороні веб-сервера. PHP є однією з найпоширеніших мов, що використовуються у сфері веб-розробок (разом із Java, .NET, Perl, Python, Ruby). PHP підтримується переважною більшістю хостинг-провайдерів. PHP — проект відкритого програмного забезпечення.

PHP інтерпретується веб-сервером у HTML-код, який передається на сторону клієнта. На відміну від скриптової мови JavaScript, користувач не бачить PHP-коду, бо браузер отримує готовий html-код. Це є перевагою з точки зору безпеки, але погіршує інтерактивність сторінок. Але ніхто не забороняє використовувати PHP для генерування JavaScript-кодів, які виконуються вже на стороні клієнта.

Особливості[ред. | ред. код]

PHP — мова, у код якої можна вбудовувати безпосередньо html-код сторінок, які, у свою чергу, коректно оброблюватимуться PHP-інтерпретатором. Обробник PHP просто починає виконувати код після відкриваючого тегу (<?php) і продовжує виконання до того моменту, поки не зустріне закриваючий тег (?>).

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

Наявність інтерфейсів до багатьох баз даних
  • у PHP вбудовані бібліотеки для роботи з MySQL, PostgreSQL, mSQL, Oracle, dbm, Hyperware, Informix, InterBase, Sybase.
  • завдяки стандарту відкритого інтерфейсу зв'язку з базами даних (англ. Open Database Connectivity Standard, ODBC) можна підключатися до всіх баз даних, до яких існує драйвер.
Традиційність
Мова PHP здаватиметься знайомою програмістам, що працюють в різних областях. Багато конструкцій мови запозичені з С, Perl. Код РНР дуже схожий на той, який зустрічається в типових програмах мовами С або Pascal. Це помітно знижує початкові зусилля при вивченні PHP. PHP — мова, що поєднує переваги Perl та С і спеціально спрямована на роботу в Інтернеті, мова з універсальним і зрозумілим синтаксисом. І хоча PHP є досить молодою мовою, вона здобула таку популярність серед web-програмістів, що в наш час є найпопулярнішою мовою для створення веб-застосунків (скриптів).
Наявність сирцевого коду та безкоштовність
Стратегія Open Source, і розповсюдження початкових текстів програм в масах, безсумнівно справили благотворний вплив на багато проектів, в першу чергу — Linux хоч і успіх проекту Apache сильно підкріпив позиції прихильників Open Source. Сказане відноситься і до історії створення PHP, оскільки підтримка користувачів зі всього світу виявилася дуже важливим чинником в розвитку проекту PHP. Ухвалення стратегії Open Source і безкоштовне розповсюдження початкових текстів PHP надало неоціненну послугу користувачам. Окрім цього, користувачі PHP в усьому світі є свого роду колективною службою підтримки, і в популярних електронних конференціях можна знайти відповіді, навіть на найскладніші питання.
Ефективність
Ефективність є дуже важливим чинником у програмуванні для середовищ розрахованих на багато користувачів, до яких належить і web. Важливою перевагою PHP є те, що ця мова належить до інтерпретованих. Це дозволяє обробляти сценарії з достатньо високою швидкістю. За деякими оцінками, більшість PHP-сценаріїв (особливо не дуже великих розмірів) обробляються швидше за аналогічні їм програми, написані на Perl. Проте хоч би що робили розробники PHP, виконавчі файли, отримані за допомогою компіляції, працюватимуть значно швидше — в десятки, а іноді і в сотні разів. Але продуктивність PHP достатня для створення цілком серйозних веб-застосунків.

Історія[ред. | ред. код]

Перші версії[ред. | ред. код]

Історія PHP починається з 1995 року, коли Расмус Лердорф (англ. Rasmus Lerdorf) створив простий застосунок мовою Perl, що аналізував відвідування користувачами його резюме на веб-сайті. Потім, коли цим застосунком вже користувалися кілька чоловік, а число охочих одержати його постійно збільшувалося, Лердорф назвав своє творіння Інструменти для особистої домашньої сторінки англ. Personal Home Page Tools версія 1 і виставив для вільного завантаження. З цієї миті почався небувалий зліт популярності PHP.

Як це завжди буває, терміново було потрібне доопрацювання і нові доповнення. Для їхньої реалізації Расмус створює нову версію пакету, тепер уже написану на С. Отриманий таким чином інструмент набуває робочої назви PHP/FI (укр. Персональна Домашня сторінка / Інтерпретатор Форм, англ. Personal Home Page / Forms Interpreter), надалі він також буде відомий під назвою PHP 2. Ця версія вже більшою мірою схожа на сьогоднішній PHP. Вона мала синтаксис і спосіб іменування змінних в стилі мови Perl, можливість вбудовування PHP операторів в html-код сторінки, автоматичну інтерпретацію форм, інтеграцію з базами даних. При цьому все працювало досить швидко, оскільки PHP прикомпилювалася до веб-серверу Apache. До 1997 року PHP використовувався вже на 50,000 доменах (не більше 1 % всіх веб-серверів)[2].

Того ж 1997 року до проекту PHP підключилися Зев Сураскі (англ. Zeev Suraski) і Енді Ґутманс (англ. Andi Gutmans). Ці студенти Техніону, одного з найкращих[джерело?] ізраїльських університетів, намагалися використовувати PHP/FI для одного з комерційних університетських проектів. При цьому їм довелося зіткнутися з багатьма труднощами і обмеженнями цієї технології. Вивчаючи початковий код PHP 2, Зев і Енді дійшли висновку про необхідність доопрацювання, а точніше істотної переробки PHP, особливо в плані синтаксису мови. Протягом декількох місяців вони блискуче впоралися з цим завданням[2].

Закінчивши роботу, Зев і Енді домовились з Расмусом про співпрацю в галузі розвитку та вдосконалення мови. З цієї миті з'являється PHP Group — група однодумців, що працюють над розвитком технології PHP. Одержаний продукт з'явився на світ 1998 року під назвою PHP 3.

При цьому головною особливість PHP 3 була можливість розширення ядра, що привернуло до роботи над PHP безліч сторонніх розробників, що створюють спеціалізовані модулі. Їх наявність дала PHP можливість працювати з величезною кількістю баз даних, протоколів, підтримувати велике число API. До кінця 1998 року кількість користувачів PHP перевищила 100 тисяч, а PHP був уже встановлений на понад 10 % серверах Інтернету. У той же час значному поширенню даної мови сприяли публікації в електронній пресі та видання посібників із PHP.

Відразу ж після виходу PHP 3, Енді Гутманс і Зев Сураскі почали переробку ядра PHP. В першу чергу належало вирішити проблему підвищення продуктивності. Новий продукт, названий Zend Engine (від імен творців: Zeev і Andi), успішно справлявся з поставленим завданням і був реалізований 1999 року. Основними реалізованими ідеями є можливість компіляції сценарію у виконуваний модуль, за рахунок чого продуктивність можна було підняти на порядок.

PHP 3 та PHP 4[ред. | ред. код]

Зеєв Сураскі та Ані Гутманс переробили аналізатор в 1997 році і сформували базу PHP 3, змінивши назву мови на рекурсивний акронім PHP: Hypertext Preprocessor.  Після цього почалося публічне тестування PHP 3, а офіційний запуск відбувся в червні 1998 року. Після цього Сураскі та Гутманс розпочали нове перекодування ядра PHP, видавши Zend Engine у 1999 році. Вони також заснували Zend Technologies в Рамат-Гані, Ізраїль.

22 травня 2000 р. Був випущений PHP 4 з підтримкою Zend Engine 1.0.  Станом на серпень 2008 року ця філія досягла версії 4.4.9. PHP 4 більше не розробляється, оновлення безпеки також більше не були випущені.

PHP 5[ред. | ред. код]

14 липня 2004 р. Був випущений PHP 5 з новим двигуном Zend Engine II.  PHP 5 включав нові функції, такі як покращена підтримка об'єктно-орієнтованого програмування, розширення PHP Data Objects (PDO) (який містить легкий і послідовний інтерфейс для доступу до баз даних) та численні поліпшення продуктивності. У 2008 році PHP 5 став єдиною стабільною версією, що розроблялася. Пізній статичний зв'язок відсутній у PHP і був доданий у версії 5.3.

Багато високопрофесійних проектів з відкритим кодом з 5 лютого 2008 року перестали підтримувати PHP 4 в новому коді, оскільки це ініціатива GoPHP5, що надається консорціумом розробників PHP, що сприяє переходу від PHP 4 до PHP 5.

З часом перекладачі PHP стали доступними для більшості існуючих 32-розрядних та 64-розрядних операційних систем, або будували їх з вихідного коду PHP, або використовували попередньо побудовані двонарні файли. Для версій PHP версії 5.3 та 5.4 єдиними доступними двосторонніми дистрибутивами Microsoft Windows були 32-розрядні версії x86, що вимагають 32-розрядний режим сумісності Windows при використанні інформаційних служб Інтернету (IIS) на 64-розрядній платформі Windows . PHP версії 5.5 зробив збірки 64-розрядних x86-64 доступними для Microsoft Windows.

PHP 6 та Unicode[ред. | ред. код]

PHP отримав змішані відгуки через відсутність власної підтримки Unicode на рівні основної мови. У 2005 році був започаткований проект, очолюваний Андрієм Змієвським, для залучення рідної підтримки Unicode на PHP, шляхом вбудовування бібліотеки "Міжнародні компоненти для Unicode" (ICU) та вбудованих текстових рядків як UTF-16. Оскільки це призведе до серйозних змін як до внутрішньої частини мови, так і до коду користувача, планувалося випустити його як версію 6.0 мови разом з іншими основними функціями, які розвиваються.

Проте дефіцит розробників, які зрозуміли необхідні зміни та проблеми продуктивності, що виникають внаслідок перетворення на UTF-16 та з нього, що рідко використовується в веб-контексті, призвело до затримок проекту. Як результат, випуск PHP 5.3 був створений у 2009 році, при цьому багато не-Unicode-функцій було відновлено з PHP 6, зокрема простору імен. У березні 2010 року проект у своїй нинішній формі був офіційно відкинутий, і був підготовлений випуск PHP 5.4, що містить більшість опублікованих функцій, що не входять до Unicode, з PHP 6, такі як риси та переприв'язка до закриття. Початкові сподівання полягали в тому, що для інтеграції з Unicode був би сформований новий план, але з 2014 року ніхто не був прийнятий.

PHP 7[ред. | ред. код]

Протягом 2014 та 2015 років було розроблено нову основну версію PHP, яку було пронумеровано PHP 7. Нумерація цієї версії викликала дебати[3]. Хоча реліз PHP 6 з Unicode ніколи не був випущений, декілька назв статей і книг посилалися на назву PHP 6, що могло викликати плутанину, якби новий реліз повторно використовував цю назву[4]. Після голосування було обрано назву PHP 7[5].

Визнання та поширення[ред. | ред. код]

PHP 4, що працює на цьому ядрі, вийшов 2000 року. На додаток до збільшення продуктивності, PHP 4 мав нові можливості щодо підтримки сесій, буферизацію виводу, безпечні способи обробки інформації, що вводиться користувачем, і нові мовні конструкції. З виходом 4 версії PHP став використовуватися вже на більш ніж 20 % доменів Інтернету.

Протягом 2000—2004 років продовжувалися активні роботи з покращення четвертої версії, але майже відразу PHP Group приступила до продумування можливостей нової версії. В першу чергу було вирішено підсилити об'єктні можливості мови, що дозволяло використовувати його для реалізації масштабних проектів. Роботи із створення п'ятої версії велися тривалий час, в них брало участь рекордна кількість фахівців, зокрема Стерлінг Хьюз (англ. Sterling Hughes) і Маркус Бергера (англ. Marcus Boerger).

У липні 2004 року виходить офіційний реліз PHP 5. В першу чергу, як і планувалося, було перероблено весь механізм роботи з об'єктами. І якщо в попередніх версіях об'єктно-орієнтоване програмування на PHP було можливе в мінімальному ступені, а тому і використовувалося на практиці не часто, то PHP 5 володіє прекрасним[джерело?] потенціалом реалізації об'єктного програмування. Окрім цього, PHP збагатився рядом цінних[Кому?] розширень для роботи з XML, різними джерелами даних, генерації графіки і інше.

Серед інших украй корисних доповнень в PHP 5 слід зазначити нову схему обробки винятків. Конструкція try/catch/throw дозволяє весь код обробки помилок локалізувати в одному місці сценарію.

Всі основні бібліотеки для роботи з XML, запозичені в PHP 4, були піддані серйозній переробці. Такі популярні розширення, як SAX, DOM і XSLT, тепер використовують інструмент libxml2, що робить їх ще ефективнішими.

У PHP 5 також включені два нові модулі для роботи з протоколами — SimpleXML і SOAP. SimpleXML дозволяє значно спростити роботу з XML-даними, представляючи вміст XML-документа у вигляді PHP-об'єкта. Розширення SOAP дозволяє будувати на PHP сценарії, що обмінюються інформацією з іншими застосунками за допомогою XML-повідомлень поверх існуючих веб-протоколів, наприклад HTTP. Модуль для роботи з SOAP для PHP 5 надає розробникам засіб для достатньо швидкого створення ефективних SOAP-клієнтів і SOAP-серверів[2].

Новий модуль PHP 5 MySQLi (MySQL Improved) призначений для роботи з MySQL-сервером версій 4.1.2 і вище, реалізовуючи не тільки процедурний, але і об'єктно-орієнтований інтерфейс до MySQL. Додаткові можливості цього модуля включають — SSL, контроль транзакцій, підтримка реплікації та інші.

Шоста версія PHP розроблялася з жовтня 2006 року. Було зроблено безліч нововведень, як, наприклад, виключення з ядра регулярних виразів POSIX і «довгих» суперглобальних масивів, видалення директив safe_mode, magic_quotes_gpc і register_globals з конфігураційного файлу php.ini. Одним з основних нововведень повинна була стати підтримка Юнікоду. Однак у березні 2010 року розробка PHP6 була визнана безперспективною через складнощі з підтримкою Юнікоду. Вихідний код PHP6 переміщений на гілку, а основною лінією розробки стала версія 5.4.

У 2014 році було проведено голосування, за результатами якого наступна версія отримала назву PHP 7. Вихід нової версії планувався в середині жовтня 2015 року. У березні 2015 року Zend представили інфографіку в якій описані основні нововведення PHP 7.

3 грудня 2015 року було оголошено про вихід PHP версії 7.0.0.

Нова версія грунтується на експериментальній гілці PHP, яка спочатку називалася phpng (PHP Next Generation - наступне покоління), і розроблялася з упором на збільшення продуктивності і зменшення споживання пам'яті. У новій версії додана можливість вказувати тип повертаються з функції даних, доданий контроль переданих типів для скалярних даних, а також нові оператори.

Синтаксис[ред. | ред. код]

Відокремлення PHP коду від HTML розмітки[ред. | ред. код]

Всі сценарії оформляються у вигляді блоків коду. Ці блоки можуть бути поміщені в HTML-код, але відділені від нього відповідними обмежувачами. Код PHP в HTML повинен знаходитись між початковим тегом <?php та кінцевим ?> (або між <script language="php"> та </script>) Бажаним варіантом виділення PHP коду є варіант <?php ?>, оскільки саме такі початковий та кінцевий теги дозволять використовувати PHP код у документах, які відповідають правилам XML. Також можна використовувати скорочений запис <? ?> (інколи потрібно активізувати даний стиль у файлі налаштувань інтерпретатора php.ini: змінна short_open_tag повинна мати значення On) і записом у стилі ASP: <% %> (в php.ini змінна asp_tags повинна мати значення On). Проте, стиль ASP не рекомендується і очікується, що він буде відсутній у PHP 6[джерело?].

Найпростіша програма Hello world на PHP виглядає так:

 <?php
   echo 'Hello, world!';
 ?>

PHP виконує код, що знаходиться в середині обмежувачів на кшталт <?php ?>. Все, що знаходиться поза обмежувачами, виводиться без змін. Таким чином виконується вставка PHP-коду в HTML-код. Наприклад, код html-сторінки з попереднім прикладом виглядатиме так:

<html>
  <head>
    <title>Тестуємо PHP</title>
  </head>
  <body>
    <?php echo 'Hello, world!'; ?>
  </body>
</html>

Відокремлення інструкцій[ред. | ред. код]

Інструкції в PHP відокремлюються символом ;. Перед закінченням скрипту (перед тегом ?>) крапку з комою ставити необов'язково.

Коментарі[ред. | ред. код]

Коментарі у PHP можуть бути як однорядкові, так і багаторядкові. Однорядкові коментарі починаються з // або # (коментар скриптових мов UNIX). Багаторядкові коментарі починаються символами /* і закінчуються */. Слід зазначити, що однорядкові коментарі йдуть або до кінця поточного рядка, або до завершального тега ?>. Наприклад:

// це однорядковий коментар
# і це також однорядковий коментар
/*
 а ось це вже багаторядковий коментар
*/

Змінні[ред. | ред. код]

Докладніше: Змінна

Основою будь-якого програмування є змінні. PHP, як і деякі інші UNIX-скриптові мови, не потребує їх опису. Існує три стилі оформлення змінних у PHP:

  • короткий стиль — змінні записуються у вигляді: $variable. Використовується в більшості випадків. Змінна, яка створюється програмним кодом, записується таким чином. Можливо також використання такого стилю для добування змінної із ФОРМИ, якщо ввімкнено register_globals у файлі конфігурації php.ini.
  • середній стиль$_POST['variable'], $_GET['variable'], $_REQUEST['variable']. Використовується для отримання даних з полів ФОРМИ. В залежності від типу передачі даних, встановлюється POST або GET або REQUEST для обох випадків. Дані змінні називаються також глобальними.
  • довгий стиль$HTTP_POST_VARS['variable'], $HTTP_GET_VARS['variable']. Найповніший стиль запису і найменш використовуваний. Починаючи з PHP 5, ці змінні можна вимкнути. Використовувати змінні такого типу не рекомендовано задля кращої сумісності із майбутніми версіями PHP.

Приклад запису змінної з десятковим дробом та рядкової змінної: php

З точки зору системи типізації, PHP є мовою програмування з динамічною типізацією[6]. Немає необхідності явного визначення типу змінних, хоча така можливість існує. В разі звернення до змінної, інтерпретатор PHP тлумачить її тип відповідно до контексту. За необхідності можливе приведення змінної до певного типу за допомогою відповідних конструкцій мови. Це може знадобитись, якщо зважити, що значення змінної можуть трактуватись по-різному в залежності від її типу. Також можливе визначення типу відповідної змінної на певному етапі виконання сценарію. Імена змінних чутливі до регістру символів.

Типи даних[ред. | ред. код]

Докладніше: Тип даних

До базових типів належать булеві дані, цілі та дійсні числа із плаваючою комою, а також рядки. Булеві дані виражають істинність значення. Цілі числа можуть бути подані у вісімковому, десятковому та шістнадцятковому вигляді. Розмір цілого числа може змінюватись залежно від платформи, зазвичай, розрядність становить 32 біти. PHP не підтримує беззнакові цілі числа. Дійсні числа із плаваючою комою можуть бути подані в десятковій або експоненційній формі. Для кожної змінної можна надати власний тип даних. Для цього існує декілька видів:

# перший вид надання змінній типу даних
$var1 = true;
$var2 = '1abc';
$var3 = 'abc1';
settype($var1, 'string'); // видасть рядок 1
settype($var2, 'integer'); // видасть число 1
settype($var3, 'bool'); // видасть true

# другий тип надання змінній типу даних
$var1 = (int);
$var1 = '1abc';
echo $var1; // видасть число 1

Робота з рядками[ред. | ред. код]

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

PHP надає широкий спектр функцій для пошуку та заміни тексту в рядках. Для цього використовують як традиційний підхід, так і спеціальний, що базується на використанні регулярних виразів. При цьому в мові реалізована підтримка двох видів регулярних виразів — Perl-сумісні та POSIX-сумісні, що розрізняються за синтаксисом та особливостями роботи.

Змішані типи даних[ред. | ред. код]

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

Особливістю мови є відмова від рівномірного розподілу ключів масивів. Реалізовано і модель багатовимірних масивів, причому без явного обмеження глибини вкладеності. Корисною властивістю PHP є можливість асоціації масивів із функцією зворотного виклику. Ці функції дозволяють проводити дії над одним чи кількома масивами в пакетному режимі. PHP наділений великою кількістю функцій роботи з масивами. У PHP можна по-різному оголошувати масиви:

# перший вид
$var = array('key' => 'value'); // створить масив $array.
print_r($var); // Array ( ['key'] => 'value' )

# другий вид
$var[0] = 0;
$var[1] = 'Hello World';
$var['key'] = 'Інший рядок';
print_r($var); // Array ( [0] => 0 [1] => 'Hello World' ['key'] => 'Інший рядок' )

# третій вид
$var[] = 'string';
$var[] = 24081991;
$var[] = 25.00;
print_r($var); // Array ( [0] => 'string' [2] => 24081991 [3] => 25.00 )

# Четвертий вид (доступний з PHP 5.4)
$var = [ 'foo' => 'bar' ];
print_r($var); // Array ( ['foo'] => 'bar' )

Також, існують два спеціальні типи даних — ресурс та NULL. Ресурс — спеціальна змінна, що містить посилання на зовнішній ресурс. Ресурси створюються та використовуються в спеціалізованих функціях. Оскільки тип містить спеціальні вказівники на відкриті файли, під'єднання (англ. include) та інше, то будь-які дії над значенням ресурсу не мають сенсу.

Область видимості змінної — середовище, в якій вона визначена. Розрізняють локальні та глобальні змінні. За замовчуванням, всі змінні мають локальний характер дії. Виділяють особливий тип змінних — статичні, що дозволяє повторне звернення до змінної в певному сегменті коду, причому змінна буде зберігати попередньо отримане значення. Існує також поняття суперглобальних змінних, які є місцем збереження даних оточення або даних, отриманих ззовні. Підтримується концепція динамічних змінних та функцій.

Константи у PHP — ідентифікатори простих значень. Можливе визначення константи, причому після її оголошення стає неможливою зміна її значення чи анулювання. Константи можуть мати лише скалярні значення. Підтримується можливість отримання значення константи за динамічним ім'ям. Область видимості констант є глобальною для сценарію та всіх під'єднаних компонентів. Також у ядрі мови визначено чимало системних констант.

Конструкції мови[ред. | ред. код]

Оператори з погляду мови програмування дозволяють виконувати відповідну дію над одним чи кількома операндами. Оператори бувають трьох типів — унарні, бінарні та тернарні. Оператори, як і в інших мовах, характеризуються не лише дією, а й асоціативністю та пріоритетністю. Особливістю булевих операцій порівняння — розрізнення двох класів — з урахуванням типу і без нього, при якому відбувається приведення до відповідного типу. Округлення відбувається завжди в менший бік. У мові реалізовані особливі класи операторів — виконання, управління помилками та перевірки належності до класу.

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

У мові реалізована функціональність посилань. Можливо створити необмежену кількість псевдонімів, що посилаються на єдиний сегмент даних. При вивільненні будь-якого з псевдонімів, сегмент даних залишається в пам'яті до моменту завершення сценарію або вивільнення усіх посилань.

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

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

Для побудови програмних комплексів можна використовувати модульний підхід, виконуючи розділення різнорідного коду. При потребі, можливе виконання під'єднання необхідних модулів, причому операція виконання може бути і умовною. Під'єднані до скрипту файли можуть повертати значення.

Додаткові можливості[ред. | ред. код]

Мова явно підтримує HTTP cookies відповідно до специфікацій Netscape. Це дозволяє проводити встановлення та читання невеликих сегментів даних на стороні клієнта. PHP надає можливість організації роботи з користувачем протягом сеансів (сесій). В сесії можна зберігати різні дані, включаючи об'єкти.

Створення GUI-додатків[ред. | ред. код]

PHP не орієнтований на створення додатків, але є потреба створення інтерфейсів, задля: налаштувань серверів, безперервного виконання, налагодження скриптів(сценаріїв), керування локальних, тестових серверів, тощо. Через це й виникли рішення проблеми.

Розширення[ред. | ред. код]

Основна серед реалізацій - використання розширень, що фактично являють з себе надлаштунки для UI-бібліотек.

Загалом, розширення виокремлюются на три типи: php-розширення, FFI-обгортки (розширення, що використовують системні функції через технологію FFI) та консольні обгортки (розширення, що спілкуються із php безпосередньо через командний інтерфейс)

До перших можна віднести: WxPHP (Windows, Linux, Mac OS X), Winbinder (Windows)

До других відносяться: Win32Std, Tk ( реалізація для Python )

До третіх належать: PHP-UI, PHP-XCB

Також є розширення, що являє із себе двосторонню обгортку, як виктористання інших мов для розширення php, так і навпаки - PSV Component Library, - проект, що складається із трьох суб-проектів:

PHP4Delphi (основний проект, автор - Сергій Перевознюк):

Реалізація поєднання php із Delphi-програмою через засоби WinAPI

активно розроблювалося з 1999 року, але через зайнятість автора, не оновлювалося вже 4 роки, через що з`явилися форки - відвітлення, з оновленнями, які можна переглянути за посиланням https://github.com/perevoznyk/php4delphi/network, одном із таких є PHP4Lazarus.

Проект PHP extensions development framework (другорядний):

Засоби для створення php-розширень, VCL-компоненти, хоч цей проект і виокремлює автор, але він є невід`ємною частиною PHP4Delphi, базові компоненти якого, мають бути використані для створення застосунків

Проект php4Applications (другорядний) - розширення для інших мов, що дає можливість легко використовувати php у C#, C, Lazarus, Delphi, C++, базується на PHP4Delphi (надає доступ до макросів, що спрощують використання php і позбавляють потреби написання власної обгортки).


Середовища розробки[ред. | ред. код]

Але є місце й повноцінним середовищам розробки, із можливістю створення програм:

DevPHP (IDE)[ред. | ред. код]

Піонером у цій катогерії є студія DevPHP-IDE, що використовувала Kylix(Delphi), як основний інтерфейс, та php-Cli задля створення користувацьких програм.

Вона включала в себе редактор коду, декілька інструментів та візуальний перегляд HTML-сторінок.

Уперше була представлена у 2002-му році, наразі має 3 стабільні версії, розробка не триває, зупинилася через загибель гол. розробника в автокатастрофі.


CodeGear Rad Studio (Extension)[ред. | ред. код]

Після неї з`явилося розширення - набір компонентів для CodeGear Rad Studio 2009, на базі php4delphi, з деякими покращеннями (веб-елементи, інспектор, зневаджувач), тривала її підтримка протягом 4-х версій, друга з яких увійшла в платне доповнення Rad Studio 2010:

Була можливість використовувати скрипти, надавати стиль веб-компонентам, переглядати стилі і веб-сторінку до збірки програми, запускати локальний сервер, збирати програму, як окремий застосунок та налагоджувати код.

Починаючи з третьої версії, розширенню студії дали назву PHPDev Xe, згодом Delphi зазнала перевтілень, і, розробку PHPDev Xe було призупинено на невизначений термін.


DevelStudio (RAD)[ред. | ред. код]

У 2009-му році, на базі того-ж самого розширення з`явилась студія, згодом, до розробки студії MessBox DVI, приєднався Ростислав Романов, і вона змінила назву на DevelStudio, перша версія з такою назвою (0.1.7) мала невелику кількість компонентів в наборі інструментів, і підтримувала лише php 4.

У 2-й версії, DevelStudio отримала підтримку php 5, були добавлені потоки, та внесені численні зміни. Код збірки (генерації) програм було закрито, а попередні версії, як і форум самої програми, затерто, з метою зашкодження зловмисникам.

Також, друга версія була інтегрована з набором компонентів AlphaControls, через який проблема із вірусами здобула нечуваного маштабу - середовище програмування стало широко вживаним серед починаючих хакерів, та популярні на той час антивіруси (MacAffie, AVG, Avira) включили стаб середи до архіву вірусів, через що, користуватися нею стало неможливо.

Через деякий час, автор AlphaControls звернувся зі скаргою до розробників, й набір компонентів було повністю вирізано з середи, але - з нових версій; у цей раз видалити посилання на попередні версії не вдалося, форум був незадоволений.

У 3-й версії середи з`явилися нові компоненти, в тому числі й браузер Chromium, замість IE, що зосередило увагу веб-розробників, й користувачів середи "Алгоритм" (схожа ідея - програмуваня на мові HTML). На той момент компіляція програм у "Алгоритмі" була платна, тому DevelStudio, як нова і безкоштовна середа розробки, переманила на себе більшість аудиторії.

З виходом версії 3.0.2 (2012-й рік), розробка середи зупинилася - головний розробник утратив сирці (початкові коди).

З цього часу почалися намагання відродити проект, першим узявся ForumRules, але його намагання виявилися марними.

Після публікації сирців, що залишилися, у 2014 році почалися перші кроки по відновленню, було зібрано версію, працюючу з проектами.

Лише наприкінці 2018 року весь початковий код було відновлено, він був узятий за основу іншої студії - PDL (Project Development Laboratory, пізніше - PHP DL).

Після звернення у 2019-му році до автора, щодо зміни політики поширення студії, та скаргою на відсутність посилань на використані бібліотеки (DCEF, PHP4Delphi, TSizeCtrl, SynEdit), форум DevelStudio було видалено, а одну з сторінок з описом проекту переспрямовано на головну сторінку( DevelStudio.org )


PHPQt (IDE)[ред. | ред. код]

У 2015-му році, Олександр Казанцев почав вивчати алгоритми розробки інтерфейсів, й створив розширення php_qml, що давало змогу створювати віджети з бібліотеки QT, але мало підтримку лише на Windows.

З цього почалася розробка PHPQt, перші версії не виявляли до себе інтересу з сторони веб-розробників, тому автор почав поглиблено допрацьовувати розширення.

28-го липня 2015 року був опублікований перший варіант компілятора проектів, на той момент це був простий виконувач скриптів, що прикріпляв php-код до стабу (як DevelStudio), і мав залежність від WinAPI => Windows, на цій вже стадії підтримувалися майже всі віджети й многопоточність, була оптимізація php-коду. З цього моменту двигун назвали PQEngine,

3-го серпня 2016 року вийшла п`ята версія компілятора застосунків (PqBuilder), що перейшов на базу PlastiQ, й мав підтримку вже новітнього на той час php 7, проекти отримали більш повноцінний компілятор і вже не потребували наявності PqEngine.dll поблизу з виконуваємим файлом, натомість візуальні бібліотеки стали додаватися статично - як файли, а не вшиватися усередину програми. Такий крок був прийнятий задля сумісності з іншими системами, та оригінальними бібліотеками Qt.

З появою шостої версії, проект став доповненням до студії Qt Studio, а компілятор став усього-ледь оптимізатором перед кінцевою зборкою програми. З`явився повноцінний редактор інтерфейсу, підказки в редакторі кода, та почала створюватися документація. З цього моменту зробили анонс щодо створення PqStudio, але її розробка не зайшла далеко.


DevelNext (IDE)[ред. | ред. код]

Паралельно із цим, головний розробник DevelStudio почав створювати нове середовище програмування, із старою ідеєю - DevelNext, студія взяла за основу графічну бібліотеку Swing та JavaFX, в результаті вийшло повністю нове середовище, із підтримкою CSS, але повністю без підтримки PHP - проект був заснований на власній мові програмування - також інтерпретуємій, jPHP, і проіснував у цьому вигляді до 17-ї версії (17-RC1), на якій проект і був покинут.

У 16-й версії, середа DevelNext отримала підтримку php 7, й була розширена ентузіастами для розробки на OS Android.


Підключення PHP до проекту[ред. | ред. код]

Також існують розширення, для геометрально-протилежного застосування - підключення PHP до проекту на іншій мові програмування:

Phalanger (C#) - php 5.4, Peachpie (C#) - php 7, PHP4Delphi(Lazarus, Delphi, C#, C, C++) - php 5.6, JPHP(Java) - php 7.0, PHPly(Python) - php 5.6

Недоліки PHP[ред. | ред. код]

  • Незручність дизайну мови[джерело?]
    • Змінні з символом $
    • Складні назви поширених функцій (html_entity_decode, Шаблон:Php, nl2br тощо)
    • Не підтримується Unicode у версіях до 6.0
  • Непередбачуваність нових версій PHP.

Критика[ред. | ред. код]

У статті «PHP: a fractal of bad design»[7] представлений докладний і ґрунтовний огляд проблем в дизайні мови програмування PHP. Автор показує винятковість PHP як одної з найбільш неопрацьованих мов, проблеми в якій носять систематичний характер. Зокрема у статті продемонстровані проблеми в самій мові, бібліотеці функцій, структурах, механізмах роботи з даними, екосистемі, засобах зневадження. Вказані недоробки в безпеці, надійності, цілісності та передбачуваності.

Якщо розглядати безпеку, то як приклад спочатку порочної практики наводиться розрізненість засобів для чищення та нормалізації даних перед їхнім використанням у різних операціях, що є прекрасною підмогою для виникнення в застосунках вразливостей, що дозволяють здійснити підстановку SQL-коду або вбудовування JavaScript на сторінку. Згадки також заслуговує підхід «небезпечний за умовчанням», який тільки останнім часом став переглядатися розробниками PHP, наприклад, причиною безлічі вразливостей є використання register_globals і підтримка виконання зовнішнього коду за URL в директиві include. З проблем у самому інтерпретаторі відзначається спроба виправити у 2007 році цілочисельну вразливість через перевірку "if (size > INT_MAX) return NULL;"; помилка в реалізації функції crypt() в PHP 5.3.7 через яку можна було зайти з будь-яким паролем; DoS-уразливість в PHP 5.4, пов'язана з виділенням пам'яті на підставі переданого користувачем значення в HTTP-заголовку Content-Length.

Ліцензія[ред. | ред. код]

Ліцензія PHP має назву The PHP License version 3.0

ЧАП за цією ліцензією та її текст можна знайти на офіційному сайті The PHP Group, а також файл із ліцензією містить дистрибутив PHP (звичайно license.txt).

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. News Archive — 2019. 7 березня 2019. PHP 7.3.3 Released. Процитовано 02 квітня 2019. 
  2. а б в Andi Gutmans, Stig Bakken, Derick Rethans. PHP5 Power Programming. — Prentice Hall, 2005. — 704 с.
  3. The Neverending Muppet Debate of PHP 6 v PHP 7. 
  4. RFC: Name of Next Release of PHP. php.net. 2014-07-07. Процитовано 2014-07-15. 
  5. Re: [PHP-DEV] [VOTE][RFC] Name of Next Release of PHP (again). 2014-07-30. Процитовано 2014-07-30. 
  6. PHP Language Manual: Type Juggling
  7. Російський переклад: PHP: фрактал плохого дизайна

Посилання[ред. | ред. код]