方法調用我有一個框架(Opencart的)控制器類(如:目錄/控制器/產品/ product.php)的代碼如下所示:混淆類,並在Opencart的
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();
,而不是 $這個 - >響應 - > 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
}
我不知道這個表達式是如何工作的?任何想法如何這是可能的?
謝謝。
我有類似的麻煩,除了沒有__get方法聲明,它也可以使用,請參閱:http://stackoverflow.com/questions/23183327/dynamically-adding-new-properties-in- PHP – user3505400