Как войти с классов в консольное приложение Symfony

Читая документацию и примеры, я обнаружил, что LoggerInterface передается через конструктор зависимости, как видел здесь, и это позволяет зависимостям выводить на консоль.

Мои вопросы:

  1. Если у меня есть несколько классов, я продолжаю передавать LoggerInterface в конструкторе или есть лучшая практика для этого? Или я не должен даже передавать это этим классам?

  2. Если я хочу заставить класс работать без LoggerInterfaceя бы всегда проверял, если $this->logger является нулевым, а затем действовать соответственно?

Например,

class ObjectOne {
/**
* @var LoggerInterface
*/
private $logger;

public function __construct (LoggerInterface $logger) {
$this->logger = $logger;
}
}

class ObjectTwo {
/**
* @var ObjectOne[]
*/
private $items;

/**
* @var LoggerInterface
*/
private $logger;

public function __construct (LoggerInterface $logger) {
$this->logger = $logger;
}

public function addObject () {
$this->items[] = new ObjectOne($this->logger);
}
}

0

Решение

В этом случае использование LoggerInterface не более чем подсказка типа.

Если вы передаете экземпляр класса (или чего-либо еще), который не реализует этот интерфейс, например:

$objectOne = new ObjectOne('randomstring');

Будет выдано сообщение о том, что первый аргумент ObjectOne должен быть примером LoggerInterfaceСтрока дана.

Вы можете полностью удалить эту подсказку типа, но тогда ваш класс может быть создан с первым аргументом любого типа.
Таким образом, удаление этой проверки может привести к непредвиденным ошибкам, например, если первый аргумент не является экземпляром класса, который реализует LoggerInterfaceи вы пытаетесь вызвать метод, который не реализован в классе, экземпляром которого является аргумент.

Кроме того, интерфейс позволяет заставить классы реализовывать те же методы, что и интерфейс, это своего рода контракт между классами.
Таким образом, у вас может быть несколько разных классов, которые реализуют один и тот же интерфейс и учитывают подсказку типа первого аргумента конструктора класса.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]