我有一个框架(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
}
我不知道这个表达式是如何工作的?知道这怎么可能吗?
谢谢。