Дык, батенька) во первых.
public function __destruct() {
$this->log('Создался объект');
не "создался", а уничтожился. раз, не
$this->log
а
self::$log
два. (у тебя ж статический метод то)
И ты хоть 20 раз напиши в конце файла
FileLogger::create('test', "file.log");
, записей больше не увидишь. Объясняю почему:
Деструктор класса срабатывает когда? правильно, когда разрушается объект. А объект у тебя разрушается когда? правильно, когда завершается работа скрипта. А разрушается он 1 раз а не 3 почему? потому что объект у тебя один.
Взгляни внимательно на функцию create , особенно на эту запись
if(isset(self::$loggers[$fname])) {
return self::$loggers[$fname];
}
и обрати внимание какое имя файла ты передаешь своему логгеру и да придет тебе озарение юный падаван.
!! Для более глубокого понимания, советую поставить xdebug, и глянуть пошагово что происходит и как.
P.S. Не вздумай даже этот логгер использовать гдето на практике. Автор видимо хотел чтото объяснить этим кодом, а не написать логгер. Ибо это дичь.