Состав класса — вызов внешнего метода из внутреннего класса

У меня есть внешний класс, который имеет другой класс в качестве члена (следуя принципу композиции по наследованию). Теперь мне нужно вызвать метод внешнего класса из класса внутри.

class Outer
{
var $inner;
__construct(Inner $inner) {
$this->inner = $inner;
}
function outerMethod();
}
class Inner
{
function innerMethod(){
// here I need to call outerMethod()
}
}

Я вижу решение добавить ссылку в конструкции Outer :: __:

$this->inner->outer = $this;

Это позволяет мне вызывать внешний метод следующим образом в Inner :: innerMethod:

$this->outer->outerMethod();

Это хорошее решение или есть лучшая альтернатива?

0

Решение

Лучшей идеей было бы включить внешний класс в качестве переменной-члена внутреннего.

Например.

class Inner
{
private $outer;
function __construct(Outer $outer) {
$this->outer= $outer;
}
function innerMethod(){
// here I need to call outerMethod()
$this->outer->outerMethod();
}
}

Если изначально невозможно построить внутреннее с внешним, вы можете поместить setOuter метод на внутреннем и вызвать его, когда вы передаете его в Outer,

Например.

class Outer
{
private $inner;
function __construct(Inner $inner) {
$inner->setOuter( $this );
$this->inner = $inner;
}
function outerMethod();
}

class Inner
{
private $outer;
function setOuter(Outer $outer) {
$this->outer= $outer;
}
function innerMethod(){
// here I need to call outerMethod()
$this->outer->outerMethod();
}
}

НОТА: var так как спецификация как переменная типа является устаревшей. использование public, protected или же private вместо. Совет — ошибаться на стороне частного лица, если у вас нет причин не делать этого.

1

Другие решения

Других решений пока нет …