Упрощённый пример вводных:
class Model
{
protected string $foo = '';
protected function foo() {echo $this->$foo;}
}
class ModelOne extends Model
{
public function __construct($text)
{
$this->foo = $text;
}
public function bar()
{
$this->foo;
}
}
class Control
{
private ModelOne $baz;
public function test()
{
$this->baz->bar();
//...??????
}
}
И вот на этом этапе у меня затык.
Мне вроде нужно в конструктор
ModelOne передать значение, но если писать
$this->baz->bar()
, то его некуда вставить, а если писать
$this->baz('SOMETEXT')->bar()
, то система закономерно ругнётся, что метода
baz нет в классе
Control.
При этом в текущем исполнении IDE говорит, что у меня нет ошибок. То есть как бы она считает эту ситуацию совершенно валидной.
Вроде бы напрашивается
$this->baz = new ModelOne('SOMETEXT');
, но останавливает, что даже без инициализации IDE даёт работать с классом, будто он уж инициализирован. И потом, делать new в классе вроде плохой тон, правильно передавать сразу всё целиком
public function test(ModelOne $baz)
{
//...
}
Но тогда нельзя его использовать везде. А если делать это в конструкторе, значит вызывать его придётся ещё выше класса
Control, и там, похоже, вся конструкция теряет смысл...
Что я упускаю?
Пожалуйста, не надо советовать фреймворки.