Я пытаюсь добавить запись в свой проект, и я получаю регистраторы, используя поиск в реестре (например, с $logger = LoggerRegistry::get('general');
).Мне интересно, как разумно генерировать и хранить такую переменную внутри класса.
В идеале я бы хотел, чтобы каждый класс содержал переменную $ logger (в идеале static и final / const), которая установлена в одной строкеоно объявлено, но я получаю фатальную ошибку «Константа в выражении содержит недопустимые операции».
class Foo
{
$logger = LoggerRegistry::get('general'); /* Fatal error: Constant expression contains invalid operations */
public function bar()
{
doThing();
self::$logger->log('');
}
}
Этот метод выдает «Константа в выражении содержит недопустимые операции».Я понимаю, что это потому, что я пытаюсь установить статическое значение, равное функции, которую нельзя определить во время компиляции.Но к тому времени, когда класс используется или даже упоминается, значение уже установлено.
Есть ли хороший обходной путь к проблеме?Как на практике ведется ведение журналов в PHP?
В идеале я не хочу отказываться от реестра, так как считаю, что он слишком тесно связывает журналирование и классы с использованием журналирования, но при этом возникает проблема с введением функции, вызывающей возникновение проблем.к фатальной проблеме.Кажется чрезмерным иметь новую ссылку для каждого экземпляра.И включение функции __init__()
или аналогичной, которая вызывается сразу после объявления класса, кажется немного ненужной.Но я могу добавить это так, что мое автозагрузка автоматически вызывает любую функцию __init__
, которую может иметь класс, если она есть.