Черти и анонимни функции в PHP

функции
В тази статия няма да говоря за това какво са Traits, няма да описвам синтаксиса или да анализирам всякакви тънкости, свързани с разрешаването на имена и наследяването на Traits.

Просто искам да покажа един малък, но горд пример за използване на черти във връзка с анонимни функции. В него няма да има нищо технически сложно: само един тип и два класа. В него също няма много голяма практическа стойност, както във всеки пример за модел. Но идеята за това как да структурирам и използвам повторно кода е много ценна според мен.
Питам заинтересованите под разреза.

Предговор

По някакъв начин се случи така, че PHP (с появата на OOP в него) по отношение на структурирането на кода е много подобен на Java. Ние наследяваме от класа и реализираме интерфейсите. Можем дори да посочим в параметрите на методите дали аргументът принадлежи на определено родословно дърво.

Но ако в Java, както и в статично типизиран език, има смисъл, тъй като ви позволява да идентифицирате определен диапазон от грешки на етапа на компилация, тогава какъв е смисълът във всички тези жестове в динамично въведен PHP? Притесняваме ли се твърде много за ненужни неща? Наистина ли е толкова необходимо да се интересуваме от бащите, бабите или братовчедите на предметите, които сме получили, когато по същество се интересуваме само дали обектът може да направи това, от което се нуждаем?

Лесно е да се види, че говоря за въвеждане на патици. Достатъчно мощна концепция, след която можете да напишете много изразителен код и не непременно склонен към повече грешки и по-малко стабилен от използването на класическия подход (можете да потърсите в Google достатъчно материали по тази тема, макар и главно по отношение на Ruby).

PHP въведе анонимни функции преди време (5.3) и аз си помислих: "Не е лошо! Но не е много полезно." Тогава (5.4) черти се появиха в PHP и разбрах, че е дошло времето. Нека накрая да преминем към пример и да видим какво може да предложи PHP.

Формулиране на проблема

Така че, нека се упражняваме с използване на черти с анонимни функции. На какво да тренираме? Е, колекциите ми дойдоха на ум, така че ще тренираме върху тях. Първо, нека помислим какво искаме и какви са начините да постигнем това.

И така, какви действия могат да се извършват върху колекции. Е, например, можем да намерим максималните и минималните елементи на колекция или елементи, които отговарят на определено условие; можем да получим нова колекция, като приложим някакъв вид операция (карта) към всеки елемент от оригиналната колекция и т.н. ... Наборът от тези методи е директно помолен да се назове Тип.