Статті для PHP-розробників України
Технічні розбори, карʼєрні звіти й переклади документації. Пишуть практики: тімліди, архітектори та мейнтейнери open source.
ТЕМИ
Карʼєра3
Pest2
DDD2
Зарплати2
Співбесіди2
Eloquent2
FrankenPHP2
Laravel2
Продуктивність2
Redis2
Черги1
Ідемпотентність1
Horizon1
Архітектура1
DI-контейнер1
Compiler passes1
DOU1
Безпека1
Плагіни1
Filament1
Адмінка1
N+11
продуктивність1
Laravel 131
Оновлення1
Messenger1
Outbox1
Doctrine1
OPcache1
Docker1
Unit-тести1
Фейки1
Feature-тести1
CI1
PHPUnit1
Продуктивність тестів1
Object cache1
Senior1
Резюме1
Кеш1
PostgreSQL1
EXPLAIN1
Індекси1
Octane1
PHP-FPM1
РЕДАКЦІЯ РАДИТЬ
КАРʼЄРА
3 вересня 2026
Зарплати PHP-розробників в Україні: що кажуть 457 анкет DOU за червень 2026
Медіана PHP-розробника чистими $3 300, Senior $4 000, продукт платить на $1 100 більше за аутсорс, а C1 додає до вилки майже тисячу доларів. Розбираємо сирі дані зарплатного опитування DOU, які портал перераховує автоматично.
РP
Редакція phpukraine
·
7 хв читання
20
статей
ПРОДУКТИВНІСТЬ
6 вересня 2026
PHP-FPM, FrankenPHP чи Octane: що обрати для Laravel і Symfony у 2026
Порівняння трьох моделей виконання без чужих бенчмарків: що саме випливає з архітектури кожної — які межі паралелізму вона задає, що ламається, коли застосунок перестає вмирати після запиту, і як змінюється деплой. У кінці — чекліст, за яким рішення приймається за пів години, а не за спринт.
РP
Редакція phpukraine
·
9 хв
·FrankenPHP
·Octane
·PHP-FPM
ПРОДУКТИВНІСТЬ
5 вересня 2026
Кеш у Laravel без застарілих даних: теги, lock і інвалідація по подіях
Кеш віддає старе не тому, що «TTL завеликий», а тому що інвалідація має дірки: масові апдейти повз модельні події, скидання всередині транзакції, дві паралельні перебудови одного ключа. Розбираємо, як насправді працюють теги в Redis, коли вони не потрібні, як накрити перебудову атомарним локом і куди правильно вішати інвалідацію.
РP
Редакція phpukraine
·
7 хв
·Кеш
·Redis
·Laravel
WORDPRESS
4 вересня 2026
Безпека плагіна WordPress: чекліст із nonces, capabilities і екранування
Плагін у WordPress живе всередині чужого сайту й успадковує його права: одна необроблена змінна в SQL або один POST без перевірки — і скомпрометовано весь інстанс. Розбираємо модель загроз, різницю між nonce і capability, правильне екранування, підготовлені запити, permission_callback у REST API та чекліст, який варто пройти перед кожним релізом.
РP
Редакція phpukraine
·
8 хв
·Безпека
·Плагіни
ТЕСТУВАННЯ
4 вересня 2026
Фейки замість моків: як тестувати use case без бази
Мок, який знає про кожен виклик репозиторію, ламається від будь-якого рефакторингу і при цьому не перевіряє стан. Показуємо, як in-memory реалізація порту на 20 рядків і FrozenClock замінюють десяток shouldReceive і роблять unit-тести use case швидкими та детермінованими.
РP
Редакція phpukraine
·
7 хв
·Unit-тести
·DDD
·Фейки
SYMFONY
4 вересня 2026
Теговані сервіси й compiler passes: розширення без правки чужого коду
Точка розширення в Symfony — це не інтерфейс і не абстрактний клас, а тег у контейнері. Розбираємо, як тег перетворюється на `iterable` чи `ServiceLocator` у конструкторі, коли атрибутів уже не вистачає і треба писати compiler pass, у якому порядку проходи виконуються, чому ваш сервіс зникає до того, як пас до нього дійде, і як усе це дебажити через `debug:container`.
РP
Редакція phpukraine
·
9 хв
·DI-контейнер
·Compiler passes
ТЕСТУВАННЯ
4 вересня 2026
Feature-тести HTTP у Pest: перевіряти сторінку, а не реалізацію
Feature-тест має відповідати на питання «що отримає браузер і краулер», а не «які методи викликав контролер». Розбираємо на реальних тестах phpukraine: canonical, meta robots, JSON-LD і sitemap — що перевіряти в HTTP-тесті, що винести в юніт і як не переписувати тести після кожного рефакторингу вʼю.
РP
Редакція phpukraine
·
7 хв
·Pest
·Feature-тести
·Laravel
ТЕСТУВАННЯ
4 вересня 2026
CI на 20 хвилин: що прискорювати першим у PHP-проєкті
Коли пайплайн триває 20 хвилин, розробники перестають чекати на зелений білд і мержать наосліп. Розбираємо, у якому порядку різати цей час у типовому Laravel-проєкті: від безкоштовних налаштувань раннера до паралельного запуску, який має йти останнім, а не першим.
РP
Редакція phpukraine
·
6 хв
·CI
·PHPUnit
·Продуктивність тестів
WORDPRESS
4 вересня 2026
Persistent object cache у WordPress: коли Redis рятує, а коли ні
Redis для WordPress продають як універсальне пришвидшення, але object cache працює лише там, де сторінка справді ходить у базу по одні й ті самі об'єкти. Розбираємо, що саме кешує `wp_cache_*`, чому за page cache виграш може бути нульовим, як рахувати вартість round-trip, чим небезпечна евікція для сесій WooCommerce і як писати код, що коректно поводиться і з persistent, і з per-request кешем.
РP
Редакція phpukraine
·
8 хв
·Продуктивність
·Redis
·Object cache
КАРʼЄРА
4 вересня 2026
З Middle у Senior: що насправді відрізняє грейди на PHP-співбесідах
У банку питань порталу 52 картки: 13 junior, 25 middle, 14 senior. Якщо покласти senior-картки поруч із middle, різниця виявляється не в складності тем, а в тому, що питають: middle пояснює механіку, senior пояснює збій, називає ціну рішення і має критерії там, де правильної відповіді не існує.
РP
Редакція phpukraine
·
7 хв
·Співбесіди
·Senior
·Карʼєра
КАРʼЄРА
4 вересня 2026
Резюме PHP-розробника, яке читають: структура, стек, приклади
Резюме читають не для того, щоб оцінити вас, а для того, щоб швидко відповісти на одне питання: чи варто витрачати годину на дзвінок. Розбираємо, що має бути на першому екрані, як писати стек так, щоб він не виглядав як тег-хмара з 2014 року, і чому рядок «PHP 8.1» у 2026 році сам по собі є сигналом.
РP
Редакція phpukraine
·
8 хв
·Резюме
·Карʼєра
ПРОДУКТИВНІСТЬ
4 вересня 2026
EXPLAIN для PHP-розробника: як читати план запиту в PostgreSQL
План запиту — не магія, а дерево вузлів із двома числами на кожному: скільки планувальник очікував і скільки насправді сталося. Розбираємо, чим Seq Scan відрізняється від Bitmap, чому оцінка розходиться з фактом, як порядок колонок у складеному індексі вирішує все і які плани дають типові конструкції Eloquent — whereHas, paginate, whereDate, withCount.
РP
Редакція phpukraine
·
8 хв
·PostgreSQL
·EXPLAIN
·Індекси
КАРʼЄРА
4 вересня 2026
Продукт чи аутсорс: що обрати PHP-розробнику і чим це коштує
У зарплатному звіті порталу медіана продуктової компанії $4 000 проти $2 900 в аутсорсі, на грейді Senior — $4 500 проти $3 500. Але медіана описує, хто де вже працює, а не ціну переходу. Розбираємо, з чого складається ця різниця в щоденному коді: горизонт життя коду, хто обирає версію PHP, що вважається успіхом і чого від вас навчиться наступна співбесіда.
РP
Редакція phpukraine
·
8 хв
·Карʼєра
·Зарплати
ПРОДУКТИВНІСТЬ
4 вересня 2026
OPcache, preload і FrankenPHP: що реально прискорює Laravel у контейнері
Розбираємо по кроках, що відбувається з PHP-кодом на кожному запиті в Docker-образі: які параметри OPcache справді важать, що дає opcache.preload і де він ламається, чому worker mode FrankenPHP знецінює половину цих налаштувань і як виміряти ефект так, щоб цифри щось означали.
РP
Редакція phpukraine
·
8 хв
·OPcache
·FrankenPHP
·Docker
SYMFONY
3 вересня 2026
Messenger і outbox: як не втратити подію між транзакцією і брокером
Класична дірка: сутність збережена, а повідомлення в брокер не пішло — або пішло, а транзакція відкотилась. Symfony Messenger вміє закривати її без окремої бібліотеки: Doctrine transport пише повідомлення тим самим з'єднанням, що й ваші сутності, тож INSERT потрапляє в ту саму транзакцію. Розбираємо конфіг, ретраї, failed transport, дедуплікацію на боці споживача і випадки, коли весь цей апарат вам не потрібен.
РP
Редакція phpukraine
·
9 хв
·Messenger
·Outbox
·Doctrine
КАРʼЄРА
3 вересня 2026
Зарплати PHP-розробників в Україні: що кажуть 457 анкет DOU за червень 2026
Медіана PHP-розробника чистими $3 300, Senior $4 000, продукт платить на $1 100 більше за аутсорс, а C1 додає до вилки майже тисячу доларів. Розбираємо сирі дані зарплатного опитування DOU, які портал перераховує автоматично.
РP
Редакція phpukraine
·
7 хв
·Зарплати
·DOU
·Співбесіди
LARAVEL
3 вересня 2026
Черги в Laravel без сюрпризів: ідемпотентність, повтори і afterCommit
Черга гарантує, що job виконається щонайменше один раз, а не рівно один. Розбираємо, звідки беруться дублі й втрачені задачі, як налаштувати tries, backoff і retryUntil, чому afterCommit обовʼязковий і як написати handle, який можна безпечно виконати двічі.
РP
Редакція phpukraine
·
8 хв
·Черги
·Ідемпотентність
·Horizon
LARAVEL
3 вересня 2026
Laravel 13: що змінилось для щоденного коду
Laravel 13 вийшов 17 березня 2026 року і в офіційному гайді оцінений у десять хвилин апгрейду. Це майже правда: ламких змін мало, але серед них перейменований CSRF-мідлвар, кеш і сесія, які більше не десеріалізують що завгодно, і кілька перейменованих властивостей у подіях черги. Розбираємо за кодом v13.30.1, що саме доведеться поправити і що нового реально стане в пригоді.
РP
Редакція phpukraine
·
5 хв
·Laravel 13
·Оновлення
LARAVEL
3 вересня 2026
Filament 5 для адмінки контентного сайту: що дає з коробки і де межа
Панель phpukraine живе на /panel: Filament v5.7 поверх Laravel 13 і Livewire 4. Вакансії й ліди в ній редагуються, а контент — ні, бо його джерело у файлах репозиторію. Розбираємо, що генерує make:filament-resource, як зробити ресурс лише для перегляду, звідки віджети беруть цифри і в якій точці Filament перестає допомагати.
РP
Редакція phpukraine
·
7 хв
·Filament
·Адмінка
·Eloquent
LARAVEL
2 вересня 2026
N+1 в Eloquent: як знайти, виправити і більше не допустити
Кожен запит швидкий, а сторінка повільна. Розбираємо механіку N+1 у Laravel, три способи його зловити до продакшену і випадки, коли eager loading робить гірше.
РP
Редакція phpukraine
·
4 хв
·Eloquent
·N+1
·продуктивність
ТЕСТУВАННЯ
1 вересня 2026
Архітектурні тести в Pest: як заборонити Illuminate у домені й перестати про це сперечатись
Домовленості про шари живуть у README, доки хтось не імпортує фасад у value object. Показуємо, як phpukraine тримає межі модульного моноліту шістьма тестами, що падають на code review, а не в продакшені.
МЛ
Михайло Левицький
·
4 хв
·Pest
·Архітектура
·DDD