15 лет использую этот логгер для дебага и логгирования.
Только в прошлом году руки дошли записать его как пакет composer
Теперь, используя в проектах, довожу до совершенства. И вот всплывает может для кого-то совершенно очевидная вещь: можно использовать деструктор для завершающей операции если она нужна всегда (почти всегда). В логгере это вывод переменной куда либо, прочие методы всего лишь настройки вывода и передача дополнительных сущностей: Title, DateTime и т.п.
Но мне почему-то казалоь что деструктор сработает в конце и один раз для всех обьектов. А тут я внимтельно обдумал это поведение и понял, что таки нет!
Во-первых не для всех обьектов. Они все разные, это не синглотон, а фабрика.
А во-вторых почему в конце? А это стоило прото проверить. Вот не знаю когда объект официльно обьявляется "умершим" Ведь то, что мы не используем его прямо сейчас, не говорит о том, что его нужно деструктить и мы не сможем использовать его потом.
Однако тест показал, что именно так все и происходит. Видимо интепретатор считывая код, помечает, что обьект больше не ипользуется и спокойно вызывает деструктор именно там, где был вызван последний метод обьекта:
Printu::obj('test in log file error.log')->dt()->file('error');
Отдельно хочу упомянуть наверно самый древний кусок, напиcанный еще моим первым учителем в мире php программирования - Кириллом Лосевым:
echo '<div style="color: #000; text-align:left; background-color:#FFFAFA; border: 1px solid silver; margin: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;">',$title == '' ? '': "<b>{$title}: </b>", nl2br(str_replace([' ','<','>'], [' ','<','>'], print_r($obj,true))),'</div>';
Это примерно 2003-2004 год, а она до сих пор изящна и вызывает приятное чуство ностальгии :)