У меня есть класс контроллера фреймворка (OpenCart) (например: catalog/controller/product/product.php), код выглядит так:
class ControllerProductProduct extends Controller {
public function index() {
//some code
$this->response->setOutput($this->render());
//some more code
}
}
есть такое выражение, как $this->response->setOutput($this->render());
. Я знаю, для чего используется это выражение, но я совершенно не понимаю, как оно работает.
$this
относится к текущему классу, то есть ControllerProductProduct
, это означает, что объект $this->response
должен существовать либо в ControllerProductProduct
, либо в его родительском классе Controller
. Но это не так. Этот объект фактически существует в защищенном свойстве родительского класса Controller
как Controller::registry->data['response']->setOutput()
. Так что не следует ли говорить так:
$this->registry->data['response']->setOutput();
вместо $this->response->setOutput();
Я также даю фрагмент класса Controller
, чтобы вы могли иметь представление.
abstract class Controller {
protected $registry;
//Other Properties
public function __construct($registry) {
$this->registry = $registry;
}
public function __get($key) {
//get() returns registry->data[$key];
return $this->registry->get($key);
}
public function __set($key, $value) {
$this->registry->set($key, $value);
}
//Other methods
}
Я не знаю, как это выражение работает? Любая идея, как это возможно?
Спасибо.