Первинна публікація
 
Первинна публікація
 
Рядок 1: Рядок 1:


'''PHP''' — це популярна серверна мова програмування, яка найчастіше використовується для створення сайтів, вебзастосунків, CMS, інтернет-магазинів, API, CRM, ERP-модулів та інших backend-систем.
'''PHP''' — це популярна серверна мова програмування, яка найчастіше використовується для створення сайтів, вебзастосунків, CMS, інтернет-магазинів, API, CRM, ERP-модулів та інших backend-систем.
Рядок 47: Рядок 46:
PHP створювався як проста мова для генерації HTML-сторінок на сервері.
PHP створювався як проста мова для генерації HTML-сторінок на сервері.


Класична схема роботи PHP виглядає так:<pre>
Класична схема роботи PHP виглядає так:<syntaxhighlight lang="text">
Браузер користувача
Браузер користувача
→ HTTP-запит
→ HTTP-запит
Рядок 54: Рядок 53:
→ HTML-відповідь
→ HTML-відповідь
→ Браузер показує сторінку
→ Браузер показує сторінку
</pre>Тобто PHP працює переважно '''на сервері'''. Користувач не бачить PHP-код. Він отримує вже готовий HTML, JSON або іншу відповідь.<blockquote>'''PHP — це мова, яка створює сторінку або відповідь на сервері, а браузер отримує вже результат.'''</blockquote>
</syntaxhighlight>Тобто PHP працює переважно '''на сервері'''. Користувач не бачить PHP-код. Він отримує вже готовий HTML, JSON або іншу відповідь.<blockquote>'''PHP — це мова, яка створює сторінку або відповідь на сервері, а браузер отримує вже результат.'''</blockquote>


== Важливі акценти ==
== Важливі акценти ==
Рядок 164: Рядок 163:
PHP історично дуже тісно повʼязаний з HTML.
PHP історично дуже тісно повʼязаний з HTML.


Приклад простої PHP-сторінки:<pre>
Приклад простої PHP-сторінки:<syntaxhighlight lang="html">
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<html>
Рядок 176: Рядок 175:
</body>
</body>
</html>
</html>
</pre>Сервер виконує PHP-код і відправляє браузеру готовий HTML.
</syntaxhighlight>Сервер виконує PHP-код і відправляє браузеру готовий HTML.


== Приклад коду ==
== Приклад коду ==
Найпростіша програма:<pre>
Найпростіша програма:<syntaxhighlight lang="php">
<?php
<?php


echo "Hello, world!";
echo "Hello, world!";
</pre>Змінні:<pre>
</syntaxhighlight>Змінні:<syntaxhighlight lang="php">
<?php
<?php


Рядок 190: Рядок 189:


echo "Привіт, $name! Тобі $age років.";
echo "Привіт, $name! Тобі $age років.";
</pre>Функція:<pre>
</syntaxhighlight>Функція:<syntaxhighlight lang="php">
<?php
<?php


Рядок 199: Рядок 198:


echo add(5, 7);
echo add(5, 7);
</pre>Масив:<pre>
</syntaxhighlight>Масив:<syntaxhighlight lang="php">
<?php
<?php


Рядок 207: Рядок 206:
     echo $language . PHP_EOL;
     echo $language . PHP_EOL;
}
}
</pre>Асоціативний масив:<pre>
</syntaxhighlight>Асоціативний масив:<syntaxhighlight lang="php">
<?php
<?php


Рядок 217: Рядок 216:


echo $user["name"];
echo $user["name"];
</pre>
</syntaxhighlight>


== Основні особливості PHP ==
== Основні особливості PHP ==
Рядок 289: Рядок 288:
Сучасний PHP активно використовує обʼєктно-орієнтований підхід.
Сучасний PHP активно використовує обʼєктно-орієнтований підхід.


Приклад класу:<pre>
Приклад класу:<syntaxhighlight lang="php">
<?php
<?php


Рядок 309: Рядок 308:


echo $user->sayHello();
echo $user->sayHello();
</pre>
</syntaxhighlight>


== Namespace ==
== Namespace ==
'''Namespace''' допомагає організовувати класи й уникати конфліктів назв.<pre>
'''Namespace''' допомагає організовувати класи й уникати конфліктів назв.<syntaxhighlight lang="php">
<?php
<?php


Рядок 324: Рядок 323:
     }
     }
}
}
</pre>
</syntaxhighlight>


== Composer ==
== Composer ==
Рядок 337: Рядок 336:
* працювати з Packagist.
* працювати з Packagist.


Встановлення пакета:<pre>
Встановлення пакета:<syntaxhighlight lang="bash">
composer require guzzlehttp/guzzle
composer require guzzlehttp/guzzle
</pre>Приклад <code>composer.json</code>:<pre>
</syntaxhighlight>Приклад <code>composer.json</code>:<syntaxhighlight lang="json">
{
{
     "require": {
     "require": {
Рядок 351: Рядок 350:
     }
     }
}
}
</pre>
</syntaxhighlight>


== Packagist ==
== Packagist ==
Рядок 416: Рядок 415:
* екосистему пакетів.
* екосистему пакетів.


Приклад маршруту Laravel:<pre>
Приклад маршруту Laravel:<syntaxhighlight lang="php">
Route::get('/', function () {
Route::get('/', function () {
     return view('welcome');
     return view('welcome');
});
});
</pre>Приклад API route:<pre>
</syntaxhighlight>Приклад API route:<syntaxhighlight lang="php">
Route::get('/users', function () {
Route::get('/users', function () {
     return User::all();
     return User::all();
});
});
</pre>
</syntaxhighlight>


== Symfony ==
== Symfony ==
Рядок 463: Рядок 462:
|Документоорієнтована база для окремих сценаріїв
|Документоорієнтована база для окремих сценаріїв
|}
|}
Приклад PDO:<pre>
Приклад PDO:<syntaxhighlight lang="php">
<?php
<?php


Рядок 477: Рядок 476:


print_r($users);
print_r($users);
</pre>
</syntaxhighlight>


== PHP і API ==
== PHP і API ==
PHP часто використовується для створення REST API.
PHP часто використовується для створення REST API.


Приклад простої JSON-відповіді:<pre>
Приклад простої JSON-відповіді:<syntaxhighlight lang="php">
<?php
<?php


Рядок 491: Рядок 490:
     "message" => "Hello from PHP API"
     "message" => "Hello from PHP API"
]);
]);
</pre>У Laravel API зазвичай створюють через controllers, routes і resources.
</syntaxhighlight>У Laravel API зазвичай створюють через controllers, routes і resources.


== PHP і CMS ==
== PHP і CMS ==
Рядок 565: Рядок 564:
* Smarty у старих або legacy-проєктах.
* Smarty у старих або legacy-проєктах.


Приклад Blade:<pre>
Приклад Blade:<syntaxhighlight lang="html">
<h1>Привіт, {{ $user->name }}</h1>
<h1>Привіт, {{ $user->name }}</h1>
</pre>
</syntaxhighlight>


== PHP і безпека ==
== PHP і безпека ==
Рядок 604: Рядок 603:
|Ключі мають бути в environment variables
|Ключі мають бути в environment variables
|}
|}
Приклад хешування пароля:<pre>
Приклад хешування пароля:<syntaxhighlight lang="php">
<?php
<?php


Рядок 614: Рядок 613:
     echo "Пароль правильний";
     echo "Пароль правильний";
}
}
</pre>
</syntaxhighlight>


== PHP і продуктивність ==
== PHP і продуктивність ==
Рядок 638: Рядок 637:
Його часто використовують разом із Nginx або Apache для обробки PHP-запитів.
Його часто використовують разом із Nginx або Apache для обробки PHP-запитів.


Типова схема:<pre>
Типова схема:<syntaxhighlight lang="text">
Браузер
Браузер
→ Nginx
→ Nginx
Рядок 644: Рядок 643:
→ PHP-застосунок
→ PHP-застосунок
→ База даних
→ База даних
</pre>
</syntaxhighlight>


== Apache і Nginx ==
== Apache і Nginx ==
Рядок 680: Рядок 679:
|Functional, acceptance і API-тести
|Functional, acceptance і API-тести
|}
|}
Приклад PHPUnit-тесту:<pre>
Приклад PHPUnit-тесту:<syntaxhighlight lang="php">
<?php
<?php


Рядок 692: Рядок 691:
     }
     }
}
}
</pre>
</syntaxhighlight>


== PHP і якість коду ==
== PHP і якість коду ==
Рядок 720: Рядок 719:


== Структура PHP-проєкту ==
== Структура PHP-проєкту ==
Приклад простої структури сучасного PHP-проєкту:<pre>
Приклад простої структури сучасного PHP-проєкту:<syntaxhighlight lang="text">
project/
project/
├── public/
├── public/
Рядок 734: Рядок 733:
├── composer.lock
├── composer.lock
└── README.md
└── README.md
</pre>У сучасних PHP-проєктах зазвичай вхідною точкою є файл:<pre>
</syntaxhighlight>У сучасних PHP-проєктах зазвичай вхідною точкою є файл:<syntaxhighlight lang="text">
public/index.php
public/index.php
</pre>
</syntaxhighlight>


== PHP і Docker ==
== PHP і Docker ==
PHP часто запускають у Docker.
PHP часто запускають у Docker.


Приклад простого <code>Dockerfile</code>:<pre>
Приклад простого <code>Dockerfile</code>:<syntaxhighlight lang="dockerfile">
FROM php:8.4-fpm
FROM php:8.4-fpm


Рядок 747: Рядок 746:


COPY . /app
COPY . /app
</pre>Приклад сервісів:<pre>
</syntaxhighlight>Приклад сервісів:<syntaxhighlight lang="yaml">
services:
services:
   php:
   php:
Рядок 758: Рядок 757:
     ports:
     ports:
       - "8080:80"
       - "8080:80"
</pre>
</syntaxhighlight>


== Переваги PHP ==
== Переваги PHP ==
Рядок 857: Рядок 856:
|Низькорівнева основа для cooperative multitasking
|Низькорівнева основа для cooperative multitasking
|}
|}
Приклад enum:<pre>
Приклад enum:<syntaxhighlight lang="php">
<?php
<?php


Рядок 866: Рядок 865:
     case Cancelled = "cancelled";
     case Cancelled = "cancelled";
}
}
</pre>Приклад match:<pre>
</syntaxhighlight>Приклад match:<syntaxhighlight lang="php">
<?php
<?php


Рядок 879: Рядок 878:


echo $message;
echo $message;
</pre>
</syntaxhighlight>


== Коли PHP — хороший вибір ==
== Коли PHP — хороший вибір ==