DIC - это некий механизм, который внедряет зависимости объекты.
Приведенный вами код не является примером использования DIC потому, что вы вручную передаете зависимости в объекты Second и Third.
Примером использования DIC будет внедрение в First, объекта Second, а в объект Second объекта Third:
class First
{
protected $second;
public function __construct(Second $second)
{
$this->second = $second;
}
public function start()
{
return $this->second->start();
}
}
class Second
{
protected $elem1;
protected $elem2;
protected $elem3;
protected $third;
public function __construct($this->elem1, $this->elem2, $this->elem3, Third $third)
{
$this->elem1 = $elem1;
$this->elem2 = $elem2;
$this->elem3 = $elem3;
$this->third = $third;
}
public function start()
{
return $this->third->start();
}
}
class Third
{
protected $elem3;
public function __construct($elem3)
{
$this->elem3 = $elem3;
}
public function start()
{
return 'Third';
}
}
При этом вы должны отдельно сконфигурировать каждый из контейнеров(объектов). Способ же будет зависить от выбора конкретного инструмента.