Wraz z pojawieniem się PHP7, dostaliśmy w nasze ręce szereg nowych narzędzi, z których najbardziej podobają mi się klasy anonimowe. Wprawdzie czytałem o praktycznych zastosowaniach tej funkcjonalności, jednak nie sądziłem, że tak szybko przyjdzie mi z nich korzystać.

W moim przypadku klasa anonimowa okazała się wyjątkowo przydatna podczas rozszerzania klasy vendora, do której nie miałem dostępu. Wyglądało to tak, że w projekcie opartym o Laravela, jedna z paczek zaciągniętych przy pomocy composera, zwracała kolekcję obiektów. Dla moich potrzeb konieczne było dodanie przygotowanego wcześniej traita do klasy modelu. Przed PHP7 wyglądałoby to tak, że utworzyłbym nowy plik z klasą dziedziczącą po modelu a w nim dodałbym trait. Rozwiązanie takie ma sens, jeśli model będzie wykorzystywany w kilku miejscach. W moim przypadku przez cały czas życia projektu, użycie modelu będzie tylko w jednym miejscu. I tutaj z pomocą przyszła anonimowa klasa.

Po tym nieco przydługim wstępie, pora przejść do konkretów. Poniższy kod to raptem kilka wierszy, ale idealnie pokazuje zasadę działania opisanego powyżej mechanizmu.

$class = new class extends SomeModel {
    use SomeTrait;
};

Tak przygotowaną klasę można wykorzystać w taki sam sposób jak klasę modelu, poszerzoną o dodatkowe metody z traita.