PHP
98 питань
Як встановити PHP на Windows?
•Завантажте PHP з php.net (Thread Safe для Apache).
•Розпакуйте в C:\php.
•Перейменуйте php.ini-development у php.ini.
•Додайте C:\php у PATH.
•Перезапустіть термінал, перевірте: php -v.
•Альтернатива: XAMPP або Laragon.
Як встановити PHP на Mac?
•Homebrew: brew install php.
•Перевірте: php -v.
•Конфігурація: php --ini.
•Для різних версій: brew install php@8.2.
•Переключення: brew link php@8.2.
Як встановити PHP на Linux?
•Ubuntu/Debian: sudo apt install php.
•З модулями: sudo apt install php-mysql php-mbstring php-xml.
•CentOS: sudo yum install php.
•Перевірка: php -v.
•Конфігурація: /etc/php/8.x/.
Що таке php.ini?
•Головний файл конфігурації PHP.
•Розташування: php --ini.
•Основні налаштування: memory_limit, upload_max_filesize.
•display_errors для розробки.
•Перезапустіть веб-сервер після змін.
Як запустити PHP скрипт?
•Командний рядок: php script.php.
•Вбудований сервер: php -S localhost:
8000.
•Через Apache/Nginx.
•Інтерактивний режим: php -a.
•Виконати код: php -r 'echo "Hello";'.
Які типи даних у PHP?
•Скаляри: bool, int, float, string.
•Складові: array, object, callable, iterable.
•Спеціальні: resource, NULL.
•PHP — слабко типізований.
•Type hints для строгості.
Чим відрізняються == від ===?
•== нестроге порівняння з приведенням типів.
•'5' == 5 поверне true.
•=== строгое порівняння значення І типу.
•'5' === 5 поверне false.
•Рекомендується використовувати ===.
Чим відрізняються require і include?
•include — Попередження при помилці, скрипт продовжується.
•require — Фатальна помилка, скрипт зупиняється.
•include_once/require_once — підключають один раз.
•require для критичних файлів.
•include для опціональних.
Що таке змінні в PHP?
•Починаються з $.
•Розрізняються за регістром: $name !== $Name.
•Не вимагають оголошення типу.
•Можуть змінювати тип динамічно.
•Глобальні: $GLOBALS, $_GET, $_POST.
Що таке константи в PHP?
•define('NAME', 'value') — старий спосіб.
•const NAME = 'value' — сучасний.
•Не починаються з $.
•Не можна змінити після визначення.
•Константи класів: Class::CONST.
Як працюють умови if/else?
•if (умова) { код }.
•elseif для додаткових умов.
•else для решти.
•Тернарний: $x = $a ? $b : $c.
•Null coalescing: $x = $a ?? 'default'.
Які цикли є в PHP?
•for ($i = 0; $i < 10; $i++).
•while (умова).
•do...while — мінімум 1 ітерація.
•foreach ($arr as $key => $val).
•break — вихід, continue — наступна ітерація.
Як оголосити функцію?
•function name($param) { return $result; }.
•Значення за замовчуванням: function f($x = 10).
•Типові підказки: function f(int $x): string.
•Анонімні: $fn = function() {}.
•Стрілочні: fn($x) => $x * 2.
Що таке область видимості змінних?
•Локальні — всередині функції.
•Глобальні — поза функціями.
•global $var — доступ до глобальної.
•static — зберігає значення між викликами.
•$GLOBALS['var'] — альтернатива global.
Як працювати зі рядками?
•Одинарні лапки: 'текст'.
•Подвійні лапки: "$var всередині".
•Heredoc: <<<EOT багато рядковий EOT;.
•Конкатенація: $a . $b.
•Функції: strlen(), substr(), strpos().
Як працювати з масивами?
•Індексований: [1, 2, 3].
•Ассоціативний: ['key' => 'value'].
•Багатовимірний: масив масивів.
•Функції: count(), array_push(), array_merge().
•Сортування: sort(), asort(), ksort().
Що таке суперглобальні змінні?
•$_GET — параметри URL.
•$_POST — дані форми.
•$_SESSION — дані сесії.
•$_COOKIE — куки.
•$_FILES — завантажені файли.
•$_SERVER — інформація про сервер.
Як обробляти форми?
•Метод форми: GET або POST.
•$_POST['field_name'] для отримання.
•Валідація: filter_var(), htmlspecialchars().
•Перевірка: isset(), empty().
•CSRF-токени для безпеки.
Як працює echo і print?
•echo — вивід, без повернення значення.
•print — повертає 1, трохи повільніше.
•echo 'a', 'b' — кілька аргументів.
•print — лише один аргумент.
•Короткий тег: <?= $var ?>.
Що таке коментарі в PHP?
•Однорядкові: // коментар.
•Однорядкові: # коментар.
•Багаторядкові: /* ... */.
•PHPDoc: /** @param type $name */.
•Коментуйте навіщо, не що.
Як працювати з JSON в PHP?
•Кодування: json_encode($array, JSON_UNESCAPED_UNICODE).
•Декодування: json_decode($json, true).
•true для асоціативного масиву.
•Перевірка помилок: json_last_error().
•Для API: header('Content-Type: application/json').
Як працювати з датою і часом?
•date('Y-m-d H:i:s') — форматування.
•time() — Unix timestamp.
•strtotime('next Monday').
•DateTime клас: new DateTime().
•DateInterval для різниці.
Що таке клас DateTime?
•new DateTime() — поточний час.
•new DateTime('2024-01-15').
•$dt->format('Y-m-d').
•$dt->modify('+1 day').
•$dt1->diff($dt2) — різниця.
Як працювати з файлами?
•file_get_contents() — прочитати.
•file_put_contents() — записати.
•fopen(), fread(), fwrite(), fclose().
•file_exists() — перевірка.
•unlink() — видалити.
Як завантажити файл на сервер?
•Форма: enctype='multipart/form-data'.
•$_FILES['input_name'].
•Перевірка помилок: $_FILES['file']['error'].
•move_uploaded_file() для збереження.
•Валідація типу і розміру.
Як працювати з директоріями?
•scandir() — список файлів.
•mkdir() — створити.
•rmdir() — видалити порожню.
•is_dir() — перевірка.
•glob('*.php') — пошук за маскою.
Що таке серіалізація?
•serialize() — об'єкт у рядок.
•unserialize() — навпаки.
•Для збереження у файл/БД.
•JSON переважніше для обміну.
•__sleep(), __wakeup() — магічні методи.
Як працювати з регулярними виразами?
•preg_match() — пошук.
•preg_match_all() — всі співпадіння.
•preg_replace() — заміна.
•preg_split() — розбиття.
•Модифікатори: i, s, m, u.
Як надіслати email у PHP?
•mail() — базова, ненадійна.
•PHPMailer — рекомендується.
•composer require phpmailer/phpmailer.
•SMTP налаштування для надійності.
•SwiftMailer/Symfony Mailer — альтернативи.
Як працювати з cURL?
•curl_init() — ініціалізація.
•curl_setopt() — опції.
•curl_exec() — виконання.
•curl_close() — закриття.
•CURLOPT_RETURNTRANSFER = true для отримання відповіді.
Як надіслати HTTP-запит?
•file_get_contents() з контекстом.
•cURL для складних запитів.
•Guzzle HTTP — популярна бібліотека.
•composer require guzzlehttp/guzzle.
•Symfony HTTP Client — альтернатива.
Як парсити XML?
•simplexml_load_string() — просто.
•simplexml_load_file().
•DOMDocument — потужніше.
•XMLReader — для великих файлів.
•XPath для пошуку.
Як парсити HTML?
•DOMDocument::loadHTML().
•DOMXPath для пошуку.
•libxml_use_internal_errors(true).
•Simple HTML DOM Parser — бібліотека.
•Symfony DomCrawler — сучасна.
Як генерувати PDF?
•TCPDF — популярна бібліотека.
•FPDF — проста.
•mPDF — підтримка UTF-
8.
•Dompdf — HTML у PDF.
•composer require dompdf/dompdf.
Як працювати з зображеннями?
•GD бібліотека — вбудована.
•imagecreatefromjpeg(), imagepng().
•Intervention Image — зручний обгортка.
•Imagick — потужніший, вимагає встановлення.
•Розмір, обрізка, водяні знаки.
Як працювати з CSV?
•fgetcsv() — читання рядка.
•fputcsv() — запис рядка.
•array_map(function($v){return str_getcsv($v);}, file('data.csv')).
•League\Csv — бібліотека.
•Кодування: mb_convert_encoding().
Як працювати з Excel?
•PhpSpreadsheet — стандарт.
•composer require phpoffice/phpspreadsheet.
•Читання: IOFactory::load().
•Запис: new Spreadsheet().
•Підтримка xlsx, xls, csv.
Як генерувати QR-коди?
•chillerlan/php-qrcode.
•endroid/qr-code.
•composer require endroid/qr-code.
•Вивід як PNG, SVG.
•Налаштування розміру та логотипу.
Як працювати з ZIP архівами?
•Клас ZipArchive.
•$zip->open('file.zip', ZipArchive::CREATE).
•$zip->addFile().
•$zip->extractTo().
•$zip->close().
Як кешувати дані?
•APCu — у пам’яті.
•Memcached — розподілений.
•Redis — персистентний.
•Файловий кеш — простий.
•Symfony Cache — абстракція.
Що таке ООП у PHP?
•Об’єктно-орієнтоване програмування.
•Класи та об’єкти.
•Інкапсуляція, наслідування, поліморфізм.
•Модифікатори доступу.
•Інтерфейси та абстрактні класи.
Як створити клас?
•class ClassName { }.
•Властивості: public $name;.
•Методи: public function method() { }.
•Конструктор: __construct().
•Створення: $obj = new ClassName().
Що таке модифікатори доступу?
•public — доступний звідусіль.
•protected — клас і нащадки.
•private — тільки у класі.
•PHP 8.1+: readonly властивості.
•За замовчуванням public.
Як працює наслідування?
•class Child extends Parent.
•Наслідує властивості та методи.
•parent::method() — виклик батька.
•Переозначення методів.
•PHP підтримує лише одинарне наслідування.
Що таке інтерфейси?
•interface Name { public function method(); }.
•Контракт без реалізації.
•class X implements Interface.
•Можна реалізувати кілька.
•Усі методи public.
Що таке абстрактні класи?
•abstract class Name { }.
•Неможливо створити екземпляр.
•Можуть містити реалізацію.
•abstract function — без реалізації.
•Наслідники повинні реалізувати абстрактні методи.
Що таке трейти?
•trait Name { методи }.
•use TraitName; у класі.
•Вирішують проблему множинного успадкування.
•Можна використовувати кілька.
•Конфлікти вирішуються явно.
Що таке статичні властивості та методи?
•static $property, static function.
•Виклик: ClassName::method().
•self:: всередині класу.
•static:: — пізніше статичне зв'язування.
•Не вимагають створення об'єкта.
Що таке магічні методи?
•__construct — конструктор.
•__destruct — деструктор.
•__get, __set — доступ до властивостей.
•__call — виклик неіснуючих методів.
•__toString — перетворення у рядок.
Що таке final?
•final class — заборонено успадкування.
•final function — заборонено перевизначення.
•Для захисту від змін.
•Immutable об'єкти часто final.
•Використовуйте усвідомлено.
Що таке простори імен?
•namespace App\Models;.
•Дозволяють уникнути конфліктів імен.
•use App\Models\User;.
•Повне ім'я: \App\Models\User.
•PSR-4 — автозавантаження за простором імен.
Як працює автозавантаження?
•spl_autoload_register().
•Стандарт PSR-
4.
•Autoload Composer.
•namespace = шлях до файлу.
•require 'vendor/autoload.php'.
Що таке Dependency Injection?
•Передача залежностей через конструктор/методи.
•Замість створення всередині класу.
•Спрощує тестування.
•DI-контейнери автоматизують.
•Інверсія контролю.
Що таке пізніше статичне зв'язування?
•static:: замість self::.
•Використовує клас виклику, а не визначення.
•Важливо при успадкуванні.
•get_called_class().
•Для фабричних методів.
Як клонувати об'єкт?
•$copy = clone $object.
•__clone() для кастомізації.
•Поверхневе копіювання за замовчуванням.
•Глибоке — вручну клонувати вкладені.
•Відмінність від = (присвоєння посилання).
Що таке анонімні класи?
•$obj = new class { }.
•PHP 7.0+.
•Для одноразових реалізацій.
•Можуть успадковувати та реалізовувати інтерфейси.
•Використовуються у тестах, моках.
Що таке enum у PHP?
•PHP 8.1+.
•enum Status { case Pending; case Active; }.
•Б backed enums: enum Status: string { case Pending = 'pending'; }.
•Типобезпечні перерахування.
•Методи можна додавати.
Що таке readonly властивості?
•PHP 8.1+.
•readonly public string $name;.
•Встановлюється лише один раз.
•PHP 8.2: readonly class.
•Для immutable об'єктів.
Що таке конструкторське підвищення властивостей?
•PHP 8.0+.
•public function __construct(public string $name).
•Оголошення властивості у конструкторі.
•Менше boilerplate коду.
•Працює з модифікаторами доступу.
Що таке патерн Singleton?
•Лише один екземпляр класу.
•private __construct().
•static getInstance().
•Важко тестувати.
•Часто вважається антипаттерном.
Як підключитися до MySQL?
•PDO: new PDO('mysql:host=localhost;dbname=test', 'user', 'pass').
•MySQLi: new mysqli().
•PDO переважніше.
•Charset: charset=utf8mb4.
•try/catch для помилок.
Як виконати запит PDO?
•$pdo->query() — без параметрів.
•$pdo->prepare() + execute() — з параметрами.
•fetch() — один рядок.
•fetchAll() — всі рядки.
•Режими: FETCH_ASSOC, FETCH_OBJ.
Що таке prepared statements?
•$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?').
•$stmt->execute([$id]).
•Захист від SQL-ін'єкцій.
•Параметризовані запити.
•Іменовані: :name.
Як захиститися від SQL-ін'єкцій?
•ЗАВЖДИ використовуйте prepared statements.
•НІКОЛИ не конкатенуйте введення.
•PDO або MySQLi з параметрами.
•Валідація вхідних даних.
•Мінімальні права БД.
Як працювати з транзакціями?
•$pdo->beginTransaction().
•Виконайте запити.
•$pdo->commit() — підтвердити.
•$pdo->rollBack() — скасувати.
•try/catch для обробки помилок.
Як працювати з PostgreSQL?
•PDO: pgsql:host=localhost;dbname=test.
•Функції: JSONB, масиви.
•pg_* функції (застарілі).
•Doctrine підтримує повністю.
•Відмінності в синтаксисі SQL.
Як працювати з SQLite?
•PDO: sqlite:/шлях/до/db.sqlite.
•Файлова база даних.
•Для невеликих проектів.
•Тестування.
•Без сервера.
Як використовувати міграції?
•Doctrine Migrations.
•Phinx.
•Laravel Migrations.
•Версійність схеми БД.
•Командний рядок для застосування.
Як оптимізувати запити?
•Індекси на колонки WHERE, JOIN.
•EXPLAIN для аналізу.
•Уникайте SELECT *.
•Limit для великих вибірок.
•Кешування результатів.
Як працювати з Redis у PHP?
•розширення phpredis або Predis.
•composer require predis/predis.
•$redis = new Redis(); $redis->connect().
•set(), get(), expire().
•Кешування сесій, даних.
Як працювати з MongoDB?
•composer require mongodb/mongodb.
•new MongoDB\Client().
•Документоорієнтована БД.
•insertOne(), find(), updateOne().
•BSON документи.
Як пагінувати результати?
•LIMIT offset, count.
•Або LIMIT count OFFSET offset.
•$page = $_GET['page'] ??
1.
•$offset = ($page -
•* $perPage.
•Загальна кількість для навігації.
Як реалізувати повнотекстовий пошук?
•MySQL FULLTEXT індекси.
•MATCH...AGAINST.
•Elasticsearch для масштабування.
•Algolia — SaaS.
•Meilisearch — легкий.
Як зберігати паролі?
•password_hash($password, PASSWORD_DEFAULT).
•password_verify() для перевірки.
•НІКОЛИ не md5/sha1.
•Bcrypt використовується за замовчуванням.
•PASSWORD_ARGON2ID ще краще.
Як захиститися від XSS?
•htmlspecialchars($data, ENT_QUOTES, 'UTF-8').
•При виведенні користувацьких даних.
•Заголовок Content-Security-Policy.
•Cookies з атрибутом HTTPOnly.
•Використовуйте шаблонизаторы з автоекрануванням.
Як захиститися від CSRF?
•CSRF токен у формі.
•Генерація: bin2hex(random_bytes(32)).
•Збереження у сесії.
•Перевірка при отриманні.
•Фреймворки роблять це автоматично.
Як безпечно працювати з сесіями?
•session.cookie_httponly =
1.
•session.cookie_secure = 1 (HTTPS).
•session.cookie_samesite = 'Strict'.
•session_regenerate_id() при вході.
•Таймаут сесії.
Як валідовувати вхідні дані?
•filter_var() для базової.
•filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL).
•Користувацька валідація.
•Symfony Validator.
•Бібліотека Respect/Validation.
Які заголовки безпеки встановити?
•Strict-Transport-Security.
•Content-Security-Policy.
•X-Content-Type-Options: nosniff.
•X-Frame-Options: DENY.
•X-XSS-Protection: 1; mode=block.
Як безпечно завантажувати файли?
•Перевіряйте MIME тип (finfo).
•Не довіряйте розширенню.
•Зберігайте поза webroot.
•Генеруйте нові імена.
•Обмежуйте розмір.
Що таке HTTPS і як налаштувати?
•Шифроване з'єднання.
•Let's Encrypt — безкоштовні сертифікати.
•Certbot для автоматизації.
•Перенаправлення HTTP → HTTPS.
•Заголовок HSTS.
Як зберігати конфігурацію безпечно?
•.env файли (не в git).
•vlucas/phpdotenv.
•Змінні оточення.
•.gitignore для секретів.
•Vault для продакшена.
Як безпечно вести логування?
•Не логувати паролі, токени.
•Маскуйте чутливі дані.
•Monolog для структурованого логування.
•Рівні: debug, info, warning, error.
•Ротація логів.
Що таке Composer?
•Менеджер залежностей PHP.
•composer init — створення проекту.
•composer require vendor/package.
•composer.lock фіксує версії.
•require 'vendor/autoload.php'.
Як працювати з Composer?
•composer install — з lock-файлу.
•composer update — оновлення.
•composer require --dev — для розробки.
•composer dump-autoload — пересоздати.
•скрипти в composer.json.
Що таке стандарти PSR?
•PSR-1, PSR-12 — стиль коду.
•PSR-4 — автозавантаження.
•PSR-7 — HTTP повідомлення.
•PSR-11 — контейнер.
•PSR-15 — middleware.
Який фреймворк PHP обрати?
•Laravel — найпопулярніший.
•Symfony — enterprise, модульний.
•Slim, Lumen — мікрофреймворки.
•Yii — повнофункціональний.
•Вибір залежить від задачі.
Що таке Laravel?
•Найпопулярніший фреймворк.
•Eloquent ORM.
•Blade шаблонізатор.
•Artisan CLI.
•Екосистема: Forge, Vapor, Nova.
Що таке Symfony?
•Enterprise фреймворк.
•Компонентний підхід.
•Doctrine ORM.
•Twig шаблонізатор.
•Багато компонентів у Laravel.
Як тестувати PHP код?
•PHPUnit — стандарт.
•composer require --dev phpunit/phpunit.
•Класи TestCase.
•Assertions: assertEquals, assertTrue.
•./vendor/bin/phpunit.
Що таке PHP-FPM?
•FastCGI Process Manager.
•Для роботи з Nginx.
•Пул процесів.
•Найкраща продуктивність.
•Конфігурація: www.conf.
Як використовувати Docker з PHP?
•Офіційні образи: php:8.2-fpm.
•Dockerfile для розширень.
•docker-compose: php + nginx + mysql.
•Volumes для коду.
•Xdebug для відлагодження.
Що нового в PHP 8?
•JIT-компіляція.
•Іменовані аргументи.
•Атрибути.
•Match вираз.
•Конструкторське підвищення.
•Union types.
Що нового в PHP 8.1/8.2/8.3?
•Enums (8.1).
•Readonly properties/classes.
•Fibers (8.1).
•Disjunctive Normal Form types (8.2).
•json_validate() (8.3).
Як відлагоджувати PHP код?
•var_dump(), print_r().
•error_log().
•Xdebug — покрокове налагодження.
•IDE: PhpStorm з Xdebug.
•dd() у Laravel.
Як профілювати PHP?
•Профілювальник Xdebug.
•Blackfire — просунутий.
•Tideways — моніторинг.
•XHProf — Facebook.
•Аналіз вузьких місць.
Що таке Swoole?
•Асинхронний PHP сервер.
•Корутіни.
•Вбудовані WebSockets.
•Висока продуктивність.
•Використовується в Laravel Octane.
Як розгорнути PHP-додаток?
•Git на сервері.
•composer install --no-dev.
•Міграції бази даних.
•.env конфігурація.
•Nginx + PHP-FPM.
•Автоматизація CI/CD.