Глосарій
Словник веб-розробника
Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.
228
термінів
47
літер
С
Семантичне версіонування (SemVer)
Семантичне версіонування — конвенція номерів версій у форматі MAJOR.MINOR.PATCH (2.4.1). Кожна частина несе конкретний зміст, і розробник відразу розуміє, чи безпечно оновитись.ПравилаPATCH (2.4.1 → 2.4.2) — виправлення багів. Зворотньо сумісно, оновлюйте спокійноMINOR (2.4.1 → 2.5.0) — нові функції. Зворотньо сумісно, старий код продовжує працюватиMAJOR (2.4.1 → 3.0.0) — зламні зміни (breaking changes). Потрібна перевірка перед оновленнямУ Composer і npm"^2.4.1" — дозволяє MINOR і PATCH (2.x.x), але не MAJOR"~2.4.1" — дозволяє лише PATCH (2.4.x)"2.4.1" — фіксована версіяPre-release і metadata2.0.0-alpha.1, 2.0.0-rc.2 — попередні версії. 2.0.0+build.42 — метадані збірки (не впливають на порівняння).
Сесія (Session)
Сесія — механізм збереження стану між HTTP-запитами на стороні сервера. Сервер зберігає дані сесії (user_id, кошик, flash-повідомлення), а клієнт отримує лише ідентифікатор сесії — зазвичай у cookie.Як це працюєПри першому запиті сервер створює session_id, зберігає дані сесії і відправляє session_id у cookie. Кожен наступний запит містить cookie з session_id — сервер знаходить дані і «впізнає» користувача.Де зберігаються даніФайлова система — просто, але не масштабується на кілька серверівБаза даних — централізовано, але додає затримку на кожному запитіRedis / Memcached — найпоширеніший варіант для продакшну. Швидко і масштабуєтьсяSession vs JWTСесія — стан на сервері, JWT — стан у токені (на клієнті). Сесію можна одразу відкликати, JWT — тільки після закінчення терміну або через blacklist. Сесії кращі для традиційних веб-застосунків, JWT — для stateless API і мікросервісів.
Складність алгоритму (Big O)
Big O notation — спосіб описати, як зростає час виконання або обсяг пам'яті алгоритму зі зростанням розміру вхідних даних n. Дозволяє порівнювати алгоритми незалежно від заліза.Основні класиO(1) — константний час. Доступ до масиву за індексом, хеш-таблиця. Не залежить від nO(log n) — логарифмічний. Бінарний пошук. Швидко навіть для мільярдів елементівO(n) — лінійний. Перебір масиву. Подвоїли n — подвоїли часO(n log n) — Merge Sort, QuickSort (середній випадок)O(n²) — вкладені цикли. Bubble Sort. Стає непридатним при n > 10000O(2ⁿ) — експоненційний. Перебір всіх підмножин. Надто повільнийНа практиціSQL-запит без індексу — O(n). З індексом — O(log n). Саме тому індекси в 100 разів важливіші за оптимізацію PHP-коду.
Спадкування
Спадкування — механізм, при якому клас-нащадок отримує властивості і методи батьківського класу і може перевизначати або розширювати їх. PHP підтримує одиночне спадкування: клас може мати лише одного батька.
Базовий приклад
class Animal {
public function __construct(protected string $name) {}
public function speak(): string { return '...'; }
}
class Dog extends Animal {
public function speak(): string { return 'Woof!'; }
public function fetch(): void { /* ... */ }
}
$d = new Dog('Rex');
$d->speak(); // "Woof!" — overriding
$d->fetch(); // власний метод
Коли НЕ варто використовувати
Спадкування часто надмірно. Питання: «чи B справді є різновидом A?» (is-a). Якщо так — ок. Якщо ви спадкуєте лише для повторного використання коду — краще Composition або Trait.
Composition over Inheritance
Вбудовування об'єктів замість спадкування — більш гнучко. Замість class EmailService extends Mailer → class EmailService { private Mailer $mailer; }.
Специфічність CSS
Специфічність (specificity) — алгоритм, за яким браузер вирішує, який CSS-правило «перемагає» при конфлікті. Вищча специфічність = правило застосовується.
Рахунок специфічності
Три групи: (A, B, C)
A — inline styles (style="..."): 1,0,0
B — ID-селектори (#main): 0,1,0 кожен
C — class, псевдоклас, атрибут (.btn, :hover, [type]): 0,0,1 кожен
Теги і псевдоелементи (div, ::before): 0,0,1, але в окремому рахунку
Приклади
#nav .item a:hover → (0,1,2) /* ID + class + псевдоклас */
.btn.btn-primary → (0,0,2)
button → (0,0,1)
/* Перемагає перший */
!important
!important перекриває будь-яку специфічність. Уникайте — робить CSS непередбачуваним. Виправданий лише для утиліт (.hidden { display: none !important; }).
Порядок при рівній специфічності
Перемагає правило, оголошене пізніше у CSS.
Статичний аналіз (PHPStan, Psalm)
Статичний аналіз — автоматична перевірка коду без його виконання. Знаходить помилки типів, недосяжний код, некоректні виклики методів на етапі CI — до того як баг потрапить на продакшн.
PHPStan
Найпопулярніший PHP-аналізатор. 10 рівнів строгості (0-10). Рівень 0 — базові помилки, рівень 9 — перевірка кожного рядка коду на коректність типів.
vendor/bin/phpstan analyse src --level=6
Psalm
Альтернатива від Vimeo. Більш суворий, підтримує @template generics, taint analysis (пошук SQL-ін'єкцій і XSS через потік даних).
Що знаходить
Виклик методу на null-значенні
Передача неправильного типу в функцію
Недосяжний код після return
Невикористані змінні та імпорти
Невичерпні match-вирази
Стек і Черга (структури даних)
Стек (Stack) і Черга (Queue) — базові лінійні структури даних з різною логікою доступу. Стек: останній прийшов — перший вийшов (LIFO). Черга: перший прийшов — перший вийшов (FIFO).Стек (LIFO)push(A), push(B), push(C)
pop() → C
pop() → BЗастосування: стек викликів (call stack), undo/redo, парсинг виразів, обхід дерева в глибину (DFS).Черга (FIFO)enqueue(A), enqueue(B), enqueue(C)
dequeue() → A
dequeue() → BЗастосування: черга задач (task queue), BFS (обхід у ширину), буфери між виробником і споживачем.DequeDouble-ended queue — додавання і видалення з обох кінців. Об'єднує можливості стека і черги.
Строга типізація (strict_types)
strict_types — директива PHP, що вмикає суворе дотримання типів: якщо функція очікує int, а передається string — кидається TypeError, а не мовчки конвертується. Додає безпеку і явність у код.