PHP

PHP е скриптов език върху сървърната (обслужваща) страна. Той е език с отворен код, който е проектиран за уеб програмиране и е широко използван за създаване на сървърни приложения и динамично уеб съдържание. Автор на езика е канадецът от датски произход Размус Лердорф. PHP е рекурсивен акроним от PHP: Hypertext Preprocessor (като в самото начало има значение, дадено от създателите му, на Personal Home Page). Пример за PHP приложение е МедияУики – софтуерът, използван от Уикипедия.

Преглед 
PHP е скриптов език със синтаксис, базиран на C и Perl. Използва се предимно в интернет среда за изпълнение на широк кръг от услуги и е един от най-популярните езици за програмиране в интернет.

PHP се разпространява под отворен лиценз (PHP License), който по своята същност е BSD лиценз и който позволява безплатно разпространяване на програмния код на интерпретатора на езика, както и създаването на производни интерпретатори под други лицензи с уговорката, че тези интерпретатори не могат да включват PHP в името си. Фактът, че PHP се разпространява свободно, го прави удачен избор за изграждане на уеб сървър, базиран изцяло на свободни продукти – GNU/Linux, Apache, MySQL/PostgreSQL и др.

При поискване кодът, който е написан на PHP, се интерпретира от уеб сървъра, на който е качен, и резултатът се връща на уеб браузърa. Потребителят не може да види чистия PHP код, без да има достъп до самия файл, в който той е записан. По този начин се осигурява защитата. PHP файловете могат да съдържат текст, HTML, CSS, JavaScript и PHP код и имат разширение *.php.

Самият език е преносим на много изчислителни архитектури и операционни системи като GNU/Linux, UNIX, macOS, Windows.

Съществуват множество модули (разширения) за PHP, които добавят различни функционалности и позволяват много по-бързо и ефективно разработване. Такива допълнителни функционалности към езика са:

 функции за обработка (създаване, редактиране) на изображения
 функции за работа с низове и регулярни изрази
 функции за работа с XML съдържание
 функции за работа със сокети (гнезда)
 функции за дата и час
 математически функции
 функции за управление на сесии и работа с бисквитки
 функции за компресия и шифриране/дешифриране
 функции за COM и .NET за (Windows)
 функции за SOAP
 функции за работа с различни бази данни
 функции за работа с принтер
 функции за създаване на приложения с графичен потребителски интерфейс, базирани на библиотеката GTK
 функции за изпращане на e-mail съобщения
 хранилище за разширения и приложения на PHP: PEAR
PHP може да работи с повечето модерни бази данни – MySQL, MariaDB, PostgreSQL, Microsoft SQL Server, Oracle, SQLite и др.

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

Поради отворения характер на езика съществуват множество потребителски групи в България и по света, посветени на програмирането с PHP, където всеки може да получи помощ в работата си с този език.

История 
Началото на PHP е поставено от Размус Лердорф през 1994 г., въпреки че самият Лердорф смята 1995 за рождената година на PHP, защото тогава „отваря“ кода на новия език за програмиране. В началото Размус създава Perl скриптове за следене на посещенията на резюмето на личната му страница, които впоследствие пренаписва и така се създава първата версия на PHP (тогава означаващо Personal Home Page).

През 1997 г. двамата израелски студенти на Technion (израелски технологичен институт) Зеев Сураски и Анди Гутманс пренаписват целия език, констатирайки множеството бъгове и отчасти неправилни концепции за строеж на програмен език и по-късно известяват Размус с техните предложения. Той ги приема и така се създава основният екип от разработчици (PHP Core team), който по-късно се превръща в групата на PHP (PHP group). Зеев Сураски и Анди Гутманс заедно с Размус Лердорф добавят нови функционалности и API за допълнителни модули към езика и така се създава PHP 3. Сураски и Гутманс пренаписват отново ядрото на езика и създават Zend engine през 1999 г. Пренаписването е направено основно от Сураски и Гутманс като курсов проект по време на тяхното обучение в Technion. Пренаписването е вследствие на факта, че кодът на PHP 2 е бил труден за поддръжка и доста нестабилен.

През 2005 се честват 10 години от създаването на PHP и 10 години от създаването на MySQL.

През годините ядрото на PHP претърпява много промени, като най-забележимите са следните:

 22 май 2000 г. – излиза версия 4 на PHP, основана на Zend Engine 1.0.
 Юли 2003 г. – версия 5 на PHP, основана на Zend Engine II.
 2005 г. – Unicode функционалност.

Синтаксис и семантика 
PHP действа главно като филтър, който взема съдържанието на файл и изпълнява специални PHP инструкции, описани във файла. PHP скриптът има начален и краен таг, между които е разположено съдържанието. Отварящият таг е <?php, а затварящият е ?>. Цялата инструкция трябва да завършва с ;.

Тук има пример за код, който визуализира „Здравей, свят“:
<?php
echo 'Здравей, свят!'; /* Hello world */
?>
Ето и пример за свързване към база данни и изпълняване на проста заявка към нея:
<?php
session_start();
$dbuser = "root";
$dbpassword = "password";
$dbhost = "localhost";
$dbname = "database";
$dbc = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname);
$q = mysqli_query($dbc,"SELECT user_id, username, password FROM users WHERE `username` = '" . $uname . "' AND password = '" . $upass . "' LIMIT 1");
if(mysqli_num_rows($q) == 1)
    $_SESSION['logged'] = true;
?>
Обектно ориентиран PHP:
<?php
class Beginning {
    function start()
    {
      echo 'Hello, world';
    }
}
$var = new Beginning();
$var->start();
?>

Дата и час:
<?php
$date = date("d.m.Y H:i:s");
echo $date; // Пример 14.07.2020 14:18:25
?>

PHP изпълнява кода в рамките на своите граници – кода между <?php и ?>, също между <?= и ?> (кратко echo). В зависимост от настройките на сървъра за отваряща граница може да се използва само <?, но това не се препоръчва. При липса на допълнителна обработка или прекъсване на зареждането на дадена страница всичко извън рамките се изпраща директно към изхода, без да бъде изпълнявано от PHP. Горният пример е еднакъв с долния текст (и наистина е конвертиран в този вид):
 Здравей, свят!
Предимство на PHP е, че позволява командите му да бъдат влагани в HTML документите, като крайните потребители не могат да видят изходния код, написан на PHP, който преработва всичко извън рамките му:
<?php
// PHP код
?>
обикновен HTML код
<?
// още PHP код
?>Работа с функции:<?php
function sum(int $a, int $b): int{
    return $a + $b;
}

$num1 = 1;
$num2 = 2 + 3;

echo sum($num1,$num2); //6

Предимства на езика 
 PHP работи на множество операционни системи (GNU/Linux, Windows, BSD, macOS) и множество уеб сървъри – Apache, lighttpd, IIS.
 PHP е лесен за разработване.
 PHP е безплатен и се разпространява под лиценза на BSD.
 PHP може да бъде лесно модифициран и адаптиран към нуждите на прилагащата го организация.
 PHP е създаден и пригоден за разработката на уеб приложения.
 PHP не изисква особени умения от разработчици, работили на структурни езици – езикът е с прост и интуитивен синтаксис за такива разработчици.
 PHP е широко разпространен поради простотата си. Има много програмисти, което води до по-евтино платен персонал във фирмите, по-ниска цена на приложенията за клиентите и още по-голяма използваемост. Поддръжката за PHP разработчици е гарантирана от множеството форуми и приложения на общността.
 По аналогия с Perl към стандартните класове на PHP могат да бъдат писани и много допълнителни модули.
 PHP поддържа следните системи за управление на бази от данни:
IBM DB2 – formix – Ingres, Microsoft SQL Server (MS SQL), mSQL, MySQL, Oracle, PostgreSQL, Sybase.
 PHP поддържа и ODBC.

Критики 
 В по-старите версии на езика по подразбиране съществува функционалност, чрез която крайните потребители могат да подават направо променливи към PHP скрипта (register_globals). Настройката по подразбиране е премахната от версия 4.2.0, но съществуват все още много стари приложения, които предполагат употребата на тази функция.
 PHP не поддържа напълно Unicode. Пълната поддръжка се предвиждаше в PHP 6, но не беше осъществена и се премина към версия PHP 7.
 PHP не поддържа именни пространства до версия 5.3 на езика – т.е. всички функции се намират в едно именно пространство.
 Съществуват много функции на библиотеки с идентична функционалност.
 Няма изградена конвенция за именуване и подреждане на аргументите на вградените функции в PHP, което прави необходимо постоянно консултиране с документация при работа с PHP.
 PHP няма вградена поддръжка на нишки (threads), което прави обработката на големи масиви от данни много трудна: страницата не се зарежда, преди целият масив от данни да е преработен, и ако потребителят прекъсне зареждането ѝ (и уеб сървърът разрешава прекъсване на заявката), прекъсва и обработката на данните.
 Обръщенията към неинициализирани променливи и елементи на масив са разрешени в PHP, което прави възможно допускането на трудни за откриване правописни грешки.
 PHP използва т. нар. „magic quotes“, които са създадени с цел да предпазват начинаещите програмисти, но объркват по-напредналите.
 Понякога се среща несъвместимост между поведението на PHP в различните версии, което предизвиква необходимостта от пренаписване на скриптовете, писани за стари версии на езика.

Модули за достъп до база от данни 
PHP поддържа връзки към следните СУБД (Системи за управление на бази от данни) – MySQL, PostgreSQL, SQLite ja Oracle. Освен това чрез ODBC съществува и общ интерфейс със следните СУБД – Adabas D, IBM DB2, iODBC, Solid и Sybase SQL Anywhere.

PHP Framework 
 Сред по-известните са Laravel, Symfony и Zend Framework.
 Всеки може сам да напише свой собствен framework.

Литература 
 Х. Кастането, Х. Роат, С. Шуман, К. Скол. Професионално програмиране с PHP ISBN 954-685-142-6
 Leon Atkinson, Zeev Suraski. Core PHP Programming. Core PHP programming third edition. ISBN 0-13-046346-9

Източници

Външни препратки 

  Официален сайт на PHP
 Ръководство по PHP  – официална документация на PHP