class Test {
function test()
{
return 'test';
}
}abstract class MasterAbstract {
public function __construct (Test $test)
{
$this->test = test;
}
protected function runMaster()
{
return $this->test->test();
}
}
class Child extends MasterAbstract
{
public function run()
{
return 1212;
}
}
Случай 1:
$c = new Child();
echo $c->run;
Получение ошибки здесь
Аргумент 1, переданный в MasterAbstract :: __ construct (), должен быть экземпляром
испытания, не дано
Случай 2: в этом я не создаю никакой объект для дочернего элемента или некоторого другого контроллера. Работает . Я использую Laravel Framework
class SomeotherController
{
private $ch;
public function __constructor(Child $ch)
{
$this->ch = $ch;
}
public function run()
{
return $this->ch->run();
}
}
Пожалуйста, кто-нибудь объяснит, как эти два дела работают?
В случае № 2 Вы вводите Child
класс объекта с параметром конструктора, который разрешается IoC Ларавела
В случае № 1 Вы создаете Child
объект с new
и вам нужно дать Test
класс в параметре.
Если вы хотите сделать так, вы можете вызвать метод make контейнера приложения:
$c = app(Child::class);
echo $c->run;
app(Child::class)
такой же как \App::make(Child::class)
, Он дает вам новый экземпляр объекта и автоматически разрешает зависимости.
Других решений пока нет …