FFlauron
Професія: PHP-розробник з нуля до PRO
Безкоштовний урок-прев'ю

Старт з нуля: PHP 8, Composer, перша програма, strict_types

PHP — мова, на якій працюють Facebook, Wikipedia, WordPress, Etsy, Slack, MailChimp. У 2026 році PHP — це не мова з 2000-х: PHP 8.3 — типобезпечний, швидкий, з модерним синтаксисом. Junior PHP-розробник може стартувати від $700-1200 в Україні.

Чому PHP

  • Низький поріг входу — простіший за Java/C#, менш гімнічний за JS
  • Величезна екосистема — Laravel, Symfony, тисячі пакетів через Composer
  • Стабільний попит — WordPress = 40% інтернету, постійно треба підтримувати/розвивати
  • Швидкий старт у фрилансі — багато sites, e-commerce, інтеграції

Що знадобиться

PHP 8.3+

# Ubuntu/Debian
sudo apt install php php-cli php-mbstring php-xml php-mysql php-curl

# Перевірити
php --version    # PHP 8.3.x

⚠ У 2026 актуальний — PHP 8.3 або 8.4. PHP 7.x і нижче — застаріле, не вчи. PHP 5 — взагалі небезпечно.

Composer — менеджер пакетів

# Глобальна інсталяція
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version

Composer для PHP = npm для Node.js = pip для Python.

Git

Стандарт для будь-якої розробки. Якщо ще не встановив:

sudo apt install git
git config --global user.name "Ім'я"
git config --global user.email "email@example.com"

IDE

  • PhpStorm (JetBrains) — найкращий для PHP, платний. Має 30-денний trial.
  • VS Code + PHP Intelephense extension — безкоштовно, дуже годне.

Перша програма

hello.php:

<?php

echo "Привіт, PHP!\n";

$name = "Олена";
echo "Привіт, $name!\n";   // змінні розкриваються в подвійних лапках
echo 'Привіт, $name';        // в одинарних — буквально

$age = 25;
echo "Тобі $age років, через 10 буде " . ($age + 10) . "\n";

Запуск:

php hello.php

Структура PHP-файлу

<?php
// код тут
// $foo = 1;
?>
  • <?php — відкриває PHP-блок
  • ?> — закриває (опційно в чистих PHP-файлах — краще опустити, щоб не плутати з вивідом)
  • ; — після кожної інструкції

Чистий .php (рекомендовано)

Тільки <?php на початку, без ?> в кінці:

<?php

declare(strict_types=1);

function greet(string $name): string {
    return "Привіт, $name!";
}

echo greet("Олена");

Змішаний з HTML (старий стиль, але робочий)

<!DOCTYPE html>
<html>
<body>
    <h1>Список</h1>
    <ul>
    <?php foreach (['яблуко', 'груша', 'слива'] as $fruit): ?>
        <li><?= htmlspecialchars($fruit) ?></li>
    <?php endforeach; ?>
    </ul>
</body>
</html>

<?= ... ?> — короткий синтаксис для <?php echo ?>. У production-проєктах використовуй шаблонізатори (Blade, Twig) замість прямого змішування.

Базовий синтаксис

<?php

// Змінні — починаються з $
$name = "Олена";
$age = 25;
$isAdmin = false;

// Типи (PHP — динамічно типізована)
$int = 42;            // int
$float = 3.14;        // float
$str = "text";        // string
$bool = true;         // bool
$arr = [1, 2, 3];     // array
$null = null;
$obj = new \stdClass(); // object

// Перевірка типу
var_dump($name);      // string(5) "Олена" — для дебагу
echo gettype($age);    // "integer"

// Конкатенація
$full = $name . " (" . $age . ")";    // .
$full = "{$name} ({$age})";            // у "" з фігурними дужками

// f-string в PHP — немає. Інтерполяція через "".

// Умови
if ($age >= 18) {
    echo "Дорослий";
} elseif ($age >= 13) {
    echo "Підліток";
} else {
    echo "Дитина";
}

// Цикл
for ($i = 0; $i < 5; $i++) {
    echo $i;
}

foreach ([1, 2, 3] as $n) {
    echo $n;
}

// Функція
function add(int $a, int $b): int {
    return $a + $b;
}

echo add(2, 3);   // 5

strict_types — сувора типізація

<?php

declare(strict_types=1);   // ⭐ найперший рядок файлу

function square(int $n): int {
    return $n * $n;
}

square(5);       // ✓ 25
square("5");     // ❌ TypeError (без strict — мовчки конвертує)

Завжди додавай declare(strict_types=1); — ловить багато помилок.

var_dump vs print_r vs echo

$arr = ['name' => 'Олена', 'age' => 25];

echo $arr;              // ⚠ "Array" — некорисно
print_r($arr);          // Array ( [name] => Олена [age] => 25 )
var_dump($arr);         // array(2) { ["name"]=> string(5) "Олена" ["age"]=> int(25) }

Для дебагу: var_dump() найкорисніший — показує і тип, і структуру.

Тест: перевір себе

  1. У чому різниця між "$name" і '$name'?
  2. Що робить declare(strict_types=1);?
  3. Як вивести масив для дебагу?
  4. Що означає <?= $x ?>?
  5. Чому варто опустити ?> в кінці чистого PHP-файлу?
Відповіді
  1. У "..." змінні розкриваються ($name → значення). У '...' все буквально.
  2. Робить функції строго типізованими: якщо очікується int, передача рядка кине TypeError замість мовчазного перетворення. Найкраща практика.
  3. print_r($arr) для людиночитабельного вигляду. var_dump($arr) для дебагу — показує типи і вкладеність.
  4. Скорочений запис для <?php echo htmlspecialchars($x); ?> — ні, фактично <?php echo $x; ?>. Sanitize окремо.
  5. Якщо є зайвий пробіл/новий рядок після ?> — він піде в HTTP-вивід. Це ламає header() (не можна слати header'и після виводу) і додає сміття до JSON-відповідей.

Сподобався урок?

Придбайте повний курс, щоб отримати доступ до всіх уроків.

Перейти до курсу