$methods = \get_class_methods($object);
foreach ($methods as $m) {
if (\substr($m, 0, 3) === 'set') {
$key = \lcfirst(\substr($m, 3));
if (isset($data[$key])) {
$object->$m($data[$key]);
}
}
}
Это можно и в класс запихнуть (сделать метод fromArray()), а так же вызывать его из конструктора.
Таким образом, добавляя и удаляя сеттеры вы автоматически управляете возможностью писать в свойство извне.
У меня на проекте очень часто проходится работать со сторонними сервисами. Например, в качестве CDN мы используем Amazon CloudFront, для рассылок mailchimp, для e-commerce Cleverbridge. А еще существуют разные CRM, с которыми тоже нужна интеграция. Так вот, при помощи DI, если правильно выделять абстракции, можно заменить любое звено в цепи. А если вы пишете тесты для своего кода, без DI вообще трудно обойтись.
Хочу добавить, что трейты — это не про наследование. Это про горизонтальное расширение.
Это можно и в класс запихнуть (сделать метод fromArray()), а так же вызывать его из конструктора.
Таким образом, добавляя и удаляя сеттеры вы автоматически управляете возможностью писать в свойство извне.
парсер.
class AccountsService
{
/**
* @var \Doctrine\ORM\EntityManager
*/
private $em;
/**
* @var NotifierInterface
*/
private $notifier;
public function __construct(EntityManager $em, NotifierInterface $notifier)
{
$this->em = $em;
$this->notifier = $notifier;
}
....
/>
/>
Идет лесом тот кандидат, который этого не осилит. Есть мнение, что в нашей профессии существуют намного более сложные вещи.