Скорее статья не для начинающих, а для тех кто любит «поколбасить» своего кода. Товарищи начинающие! Не тратьте время! Берите готовые библиотеки и лучше пишите что-нибудь полезное!
Конечно, использование готовых библиотек более правильное решение, но новичкам всё же необходимо «колбасить». Ведь единственный способ научиться программировать — сидеть и программировать.
SplObjectStorage, вероятно, чтобы можно было удобно detatch'ить роуты. Но совершенно очевидно, что коллекция должна быть приватная.
Напрашивается ответная статья с исправлениями всех ошибок :)
Методов addLogger, removeLogger и т.п. в Logger нету намеренно, т.к. логер должен логировать. В зону его ответственности не должна входить работа с коллекцией роутов.
Если честно, то Logger и о SplObjectStorage ничего не должен знать, в конструкторе ему тупо должен передаваться Iterator.
Посмотрите на Monolog, там Route — это Handler, и доступны методы pushHandler, popHandler и setHandlers. Так же там разделена ответственность класса Route на Handler и Processor. Handler — знает куда писать, а Processor — форматирует контекст
Предполагалось, что паблик свойствами будут те, которые можно установить при инициализации роута. Просто косяк в установке этих свойств (устанавливаются и паблик и протектед и приват свойства). А вот методы действительно, не должны быть паблик, мой косяк
Потому что помимо syslog надо еще openlog юзать, а значит надо это все инкапсулировать в какой-то сервис. А значит мы берем стандарт psr-3 регламентирующий ткой интерфейс и радуемся. А еще лучше вообще взять monolog, в котором есть хэндлер для syslog.
А еще есть куча случаев когда syslog не катит. Допустим у меня логи кидаются в аргегатор логов напряму (graylog и другие), кто-то любит файлики, кто-то выплевывает их в stderr/stdout docker-контейнера и т.д. И вот за тем что бы у всех все было одинаково хотя бы в плане интерфейса — ввели psr-3.
Пишем свой логер на основе psr/log. Для начинающих