Допустим, у меня есть следующий код
class MyLogger
{
const DEFAULT_KEY = 'DEF';
const USER_KEY = 'USE';
const BOOK_KEY = 'BOO';
//methods dealing with logs
}
abstract class Master
{
protected $log_key = MyLogger::DEFAULT_KEY;
protected do_something() {
MyLogger::log(static::$log_key,"message");
}
}
class User extends Master
{
protected $log_key = MyLogger::USER_KEY;
}
class Book extends Master
{
protected $log_key = MyLogger::BOOK_KEY;
}
MyLogger отвечает за работу с журналами приложения, у каждого журнала есть ключ, ссылающийся на бизнес-объект, который он из Master, имеет методы, общие для всех своих детей, один создание журнала Каждый ребенок переопределяет ключ $ log_key, который следует использовать
Теперь у меня болит голова, пытаясь привести его в соответствие с хорошей практикой. Я могу ввести MyLogger в конструктор Мастера, но не могу найти лучший способ позволить каждому ребенку использовать правильный log_key без импорта MyLogger в каждый из них, просто чтобы иметь возможность получить константы ключей