Какова хорошая практика с константами класса и инъекцией зависимости - PullRequest
0 голосов
/ 17 марта 2020

Допустим, у меня есть следующий код

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 в каждый из них, просто чтобы иметь возможность получить константы ключей

...