Типизированные свойства, представленные в PHP 7.4, являются одной из наиболее важных функций, добавленных PHP за последние годы. В Symfony 5.1 реализовали новые возможности на их основе, такие как извлечение информации о типизированных свойствах с помощью компонента PropertyInfo.
Рассмотрим этот пример, используя типизированные свойства:
use Twig\Environment;
class SomeServiceClass
{
/** @required */
public Environment $twig;
public function someMethod()
{
$this->twig->render('...');
// ...
}
}
В предыдущих версиях Symfony этот пример не работал, потому что сервис Twig неправильно внедрен. В Symfony 5.1 этот пример будет работать как положено. Причина в том, что Symfony 5.1 автоматически связывает все общедоступные свойства, которые типизируются классами, относящимися к сервисам, и которые включают аннотацию @required.
Некоторые вещи для рассмотрения:
- Только общедоступные объекты имеют автоматическую связь; защищенные и закрытые свойства никогда не будут автоматически подключены, чтобы избежать путаницы;
- На практике это эквивалентно введению сеттера, что имеет недостатки и должно использоваться только в очень специфических сценариях.
Эта новая функция является лишь одним из многих инструментов, которые Symfony предоставляет вам для автоматизации настройки способов создания сервисов/объектов. Если это не подходит для разработки приложений, можно продолжать использовать традиционное внедрение служб, основанное на конструкторах и частных свойствах.