PHP: відмінності між версіями
R (обговорення | внесок) Первинна публікація |
R (обговорення | внесок) Первинна публікація |
||
| Рядок 1: | Рядок 1: | ||
'''PHP''' — це популярна серверна мова програмування, яка найчастіше використовується для створення сайтів, вебзастосунків, CMS, інтернет-магазинів, API, CRM, ERP-модулів та інших backend-систем. | '''PHP''' — це популярна серверна мова програмування, яка найчастіше використовується для створення сайтів, вебзастосунків, CMS, інтернет-магазинів, API, CRM, ERP-модулів та інших backend-систем. | ||
| Рядок 47: | Рядок 46: | ||
PHP створювався як проста мова для генерації HTML-сторінок на сервері. | PHP створювався як проста мова для генерації HTML-сторінок на сервері. | ||
Класична схема роботи PHP виглядає так:< | Класична схема роботи PHP виглядає так:<syntaxhighlight lang="text"> | ||
Браузер користувача | Браузер користувача | ||
→ HTTP-запит | → HTTP-запит | ||
| Рядок 54: | Рядок 53: | ||
→ HTML-відповідь | → HTML-відповідь | ||
→ Браузер показує сторінку | → Браузер показує сторінку | ||
</ | </syntaxhighlight>Тобто PHP працює переважно '''на сервері'''. Користувач не бачить PHP-код. Він отримує вже готовий HTML, JSON або іншу відповідь.<blockquote>'''PHP — це мова, яка створює сторінку або відповідь на сервері, а браузер отримує вже результат.'''</blockquote> | ||
== Важливі акценти == | == Важливі акценти == | ||
| Рядок 164: | Рядок 163: | ||
PHP історично дуже тісно повʼязаний з HTML. | PHP історично дуже тісно повʼязаний з HTML. | ||
Приклад простої PHP-сторінки:< | Приклад простої PHP-сторінки:<syntaxhighlight lang="html"> | ||
<!DOCTYPE html> | <!DOCTYPE html> | ||
<html> | <html> | ||
| Рядок 176: | Рядок 175: | ||
</body> | </body> | ||
</html> | </html> | ||
</ | </syntaxhighlight>Сервер виконує PHP-код і відправляє браузеру готовий HTML. | ||
== Приклад коду == | == Приклад коду == | ||
Найпростіша програма:< | Найпростіша програма:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
echo "Hello, world!"; | echo "Hello, world!"; | ||
</ | </syntaxhighlight>Змінні:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 190: | Рядок 189: | ||
echo "Привіт, $name! Тобі $age років."; | echo "Привіт, $name! Тобі $age років."; | ||
</ | </syntaxhighlight>Функція:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 199: | Рядок 198: | ||
echo add(5, 7); | echo add(5, 7); | ||
</ | </syntaxhighlight>Масив:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 207: | Рядок 206: | ||
echo $language . PHP_EOL; | echo $language . PHP_EOL; | ||
} | } | ||
</ | </syntaxhighlight>Асоціативний масив:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 217: | Рядок 216: | ||
echo $user["name"]; | echo $user["name"]; | ||
</ | </syntaxhighlight> | ||
== Основні особливості PHP == | == Основні особливості PHP == | ||
| Рядок 289: | Рядок 288: | ||
Сучасний PHP активно використовує обʼєктно-орієнтований підхід. | Сучасний PHP активно використовує обʼєктно-орієнтований підхід. | ||
Приклад класу:< | Приклад класу:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 309: | Рядок 308: | ||
echo $user->sayHello(); | echo $user->sayHello(); | ||
</ | </syntaxhighlight> | ||
== Namespace == | == Namespace == | ||
'''Namespace''' допомагає організовувати класи й уникати конфліктів назв.< | '''Namespace''' допомагає організовувати класи й уникати конфліктів назв.<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 324: | Рядок 323: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
== Composer == | == Composer == | ||
| Рядок 337: | Рядок 336: | ||
* працювати з Packagist. | * працювати з Packagist. | ||
Встановлення пакета:< | Встановлення пакета:<syntaxhighlight lang="bash"> | ||
composer require guzzlehttp/guzzle | composer require guzzlehttp/guzzle | ||
</ | </syntaxhighlight>Приклад <code>composer.json</code>:<syntaxhighlight lang="json"> | ||
{ | { | ||
"require": { | "require": { | ||
| Рядок 351: | Рядок 350: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
== Packagist == | == Packagist == | ||
| Рядок 416: | Рядок 415: | ||
* екосистему пакетів. | * екосистему пакетів. | ||
Приклад маршруту Laravel:< | Приклад маршруту Laravel:<syntaxhighlight lang="php"> | ||
Route::get('/', function () { | Route::get('/', function () { | ||
return view('welcome'); | return view('welcome'); | ||
}); | }); | ||
</ | </syntaxhighlight>Приклад API route:<syntaxhighlight lang="php"> | ||
Route::get('/users', function () { | Route::get('/users', function () { | ||
return User::all(); | return User::all(); | ||
}); | }); | ||
</ | </syntaxhighlight> | ||
== Symfony == | == Symfony == | ||
| Рядок 463: | Рядок 462: | ||
|Документоорієнтована база для окремих сценаріїв | |Документоорієнтована база для окремих сценаріїв | ||
|} | |} | ||
Приклад PDO:< | Приклад PDO:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 477: | Рядок 476: | ||
print_r($users); | print_r($users); | ||
</ | </syntaxhighlight> | ||
== PHP і API == | == PHP і API == | ||
PHP часто використовується для створення REST API. | PHP часто використовується для створення REST API. | ||
Приклад простої JSON-відповіді:< | Приклад простої JSON-відповіді:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 491: | Рядок 490: | ||
"message" => "Hello from PHP API" | "message" => "Hello from PHP API" | ||
]); | ]); | ||
</ | </syntaxhighlight>У Laravel API зазвичай створюють через controllers, routes і resources. | ||
== PHP і CMS == | == PHP і CMS == | ||
| Рядок 565: | Рядок 564: | ||
* Smarty у старих або legacy-проєктах. | * Smarty у старих або legacy-проєктах. | ||
Приклад Blade:< | Приклад Blade:<syntaxhighlight lang="html"> | ||
<h1>Привіт, {{ $user->name }}</h1> | <h1>Привіт, {{ $user->name }}</h1> | ||
</ | </syntaxhighlight> | ||
== PHP і безпека == | == PHP і безпека == | ||
| Рядок 604: | Рядок 603: | ||
|Ключі мають бути в environment variables | |Ключі мають бути в environment variables | ||
|} | |} | ||
Приклад хешування пароля:< | Приклад хешування пароля:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 614: | Рядок 613: | ||
echo "Пароль правильний"; | echo "Пароль правильний"; | ||
} | } | ||
</ | </syntaxhighlight> | ||
== PHP і продуктивність == | == PHP і продуктивність == | ||
| Рядок 638: | Рядок 637: | ||
Його часто використовують разом із Nginx або Apache для обробки PHP-запитів. | Його часто використовують разом із Nginx або Apache для обробки PHP-запитів. | ||
Типова схема:< | Типова схема:<syntaxhighlight lang="text"> | ||
Браузер | Браузер | ||
→ Nginx | → Nginx | ||
| Рядок 644: | Рядок 643: | ||
→ PHP-застосунок | → PHP-застосунок | ||
→ База даних | → База даних | ||
</ | </syntaxhighlight> | ||
== Apache і Nginx == | == Apache і Nginx == | ||
| Рядок 680: | Рядок 679: | ||
|Functional, acceptance і API-тести | |Functional, acceptance і API-тести | ||
|} | |} | ||
Приклад PHPUnit-тесту:< | Приклад PHPUnit-тесту:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 692: | Рядок 691: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
== PHP і якість коду == | == PHP і якість коду == | ||
| Рядок 720: | Рядок 719: | ||
== Структура PHP-проєкту == | == Структура PHP-проєкту == | ||
Приклад простої структури сучасного PHP-проєкту:< | Приклад простої структури сучасного PHP-проєкту:<syntaxhighlight lang="text"> | ||
project/ | project/ | ||
├── public/ | ├── public/ | ||
| Рядок 734: | Рядок 733: | ||
├── composer.lock | ├── composer.lock | ||
└── README.md | └── README.md | ||
</ | </syntaxhighlight>У сучасних PHP-проєктах зазвичай вхідною точкою є файл:<syntaxhighlight lang="text"> | ||
public/index.php | public/index.php | ||
</ | </syntaxhighlight> | ||
== PHP і Docker == | == PHP і Docker == | ||
PHP часто запускають у Docker. | PHP часто запускають у Docker. | ||
Приклад простого <code>Dockerfile</code>:< | Приклад простого <code>Dockerfile</code>:<syntaxhighlight lang="dockerfile"> | ||
FROM php:8.4-fpm | FROM php:8.4-fpm | ||
| Рядок 747: | Рядок 746: | ||
COPY . /app | COPY . /app | ||
</ | </syntaxhighlight>Приклад сервісів:<syntaxhighlight lang="yaml"> | ||
services: | services: | ||
php: | php: | ||
| Рядок 758: | Рядок 757: | ||
ports: | ports: | ||
- "8080:80" | - "8080:80" | ||
</ | </syntaxhighlight> | ||
== Переваги PHP == | == Переваги PHP == | ||
| Рядок 857: | Рядок 856: | ||
|Низькорівнева основа для cooperative multitasking | |Низькорівнева основа для cooperative multitasking | ||
|} | |} | ||
Приклад enum:< | Приклад enum:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 866: | Рядок 865: | ||
case Cancelled = "cancelled"; | case Cancelled = "cancelled"; | ||
} | } | ||
</ | </syntaxhighlight>Приклад match:<syntaxhighlight lang="php"> | ||
<?php | <?php | ||
| Рядок 879: | Рядок 878: | ||
echo $message; | echo $message; | ||
</ | </syntaxhighlight> | ||
== Коли PHP — хороший вибір == | == Коли PHP — хороший вибір == | ||