Чи може PHP бути функціональною мовою програмування?

← Чи може PHP бути функціональною мовою програмування?

Ashterix

docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards

uk/articles/from-tg/php/functional-php.md новий файл +56 −0

Чи може PHP бути функціональною мовою програмування?

Нещодавно згадав про бібліотеку мого колишнього тімліда і гарного товариша Slava Basko, яка дозволяє писати PHP-код у функціональному стилі. Власне, ця стаття — про мій досвід знайомства з нею, рефлексію та порівняння з підходами, які я використовую у своїй щоденній практиці.

Ті, хто мене знають, знають і про мою любов до ООП, архітектурної чистоти і чіткого контролю залежностей. Власне, я став таким не в останню чергу завдяки Славі — колись саме він відкрив мені світ ООП. Але минули роки, і Слава захопився мовою Haskell та загалом функціональним підходом у програмуванні. І от результат — він створив бібліотеку, яка переносить функціональний підхід в PHP-світ.

В чому сенс бібліотеки?

Бібліотека дозволяє:

  • писати декларативний код, де немає проміжних змінних і імперативних конструкцій;
  • використовувати каррінг, pipe, compose, partial тощо;
  • створювати читабельні ланцюжки трансформацій без втрати контексту.

Приклад — зведення кількості товарів у масиві:

$totalQty = compose(sum, pluck('qty'))($products);

Інший приклад — форматування опису товарів:

$commonDescription = pipe(
    pluck('description'),
    map(unary('trim')),
    select(unary('strlen')),
    join(', '),
    take(34),
    partial_r('trim', ', ')
)($products);

Порівняння функціонального підходу з ООП та процедурним підходом

ПП — процедурний підхід, ООП — обʼєктно-орієнтований, ФП — функціональний.

ПП ООП ФП
Читабельність Прямолінійна, але з купою змінних Структуровано, але часто занадто обʼємно Лаконічно, але може бути незвично
Повторне використання Складно масштабувати Абстракції, спадкування Композиція, замикання
Тестування Залежить від глобальних станів Часто потребує моків Простота завдяки чистим функціям
Гнучкість Низька Залежить від скіла розробника, середня або висока Висока при трансформаціях
Контроль залежностей Відсутній Повний Частково можливий, значно складніше відслідковувати, або я не розібрався
Коли це зручно? Якщо обробляєш масиви або структури даних Якщо маєш багато етапів трансформації Якщо хочеш відмовитись від змінних і foreach

Висновок

Це не звичний для більшості PHP-розробників підхід. Але він працює, зручний, і я точно буду використовувати його всередині методів класів, де потрібно швидко і чітко трансформувати дані. Чисті функції і pipe чудово лягають на обробку DTO, валідацію, генерацію описів тощо.

Рекомендую подивитись: slava-basko/functional-php.


Вперше опубліковано в Telegram-каналі «Створений щоб помирати» 20.06.2025.