Створений щоб помирати
165 subscribers
30 photos
9 videos
43 links
Канал про PHP, розробку, проєктування і нескінченне навчання в циклі життя.
Download Telegram
#devtools #longread

🐘Чи може 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);


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

1️⃣ Читабельність:

ПП: Прямолінійна, але з купою змінних
ООП: Структуровано, але часто занадто обʼємно
ФП: Лаконічно, але може бути незвично

2️⃣ Повторне використання:

ПП: Складно масштабувати
ООП: Абстракції, спадкування
ФП: Композиція, замикання

3️⃣ Тестування:

ПП: Залежить від глобальних станів
ООП: Часто потребує моків
ФП: Простота завдяки чистим функціям

4️⃣ Гнучкість:

ПП: Низька
ООП: Залежить від скіла розробника, середня або висока
ФП: Висока при трансформаціях

5️⃣ Контроль залежностей

ПП: Відсутній
ООП: Повний
ФП: Частково можливий, значно складніше відслідковувати, або я не розібрався

6️⃣ Коли це зручно?

ПП: Якщо обробляєш масиви або структури даних
ООП: Якщо маєш багато етапів трансформації
ФП: Якщо хочеш відмовитись від змінних і foreach

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


Рекомендую подивитись.
🔗 https://packagist.org/packages/slava-basko/functional-php
А якщо будуть питання — ставте їх в коментарях, попрошу Славу поглядувати на коменти, він точно розкаже і пояснить краще за мене 😉
👍2