Tôi có một khuôn khổ (OpenCart) lớp điều khiển (như: Danh mục/điều khiển/sản phẩm/product.php) mã trông giống như:lớp khó hiểu và gọi phương thức trong OpenCart
class ControllerProductProduct extends Controller {
public function index() {
//some code
$this->response->setOutput($this->render());
//some more code
}
}
có một biểu hiện như $this->response->setOutput($this->render());
. Tôi biết những gì biểu thức này được sử dụng cho, nhưng tôi khá bối rối trong cách thức hoạt động.
$this
là lớp hiện tại tức là ControllerProductProduct
, có nghĩa là $this->response
đối tượng phải tồn tại trong ControllerProductProduct
hoặc lớp cha mẹ Controller
. Nhưng đây không phải là trường hợp. Đối tượng này thực sự tồn tại trong thuộc tính được bảo vệ của lớp cha Controller
là Controller::registry->data['response']->setOutput()
. Vì vậy, nó không nên nói như:
$this->registry->data['response']->setOutput();
thay vì $ this-> response-> setOutput();
Tôi cũng đưa ra một đoạn gồm Controller
lớp để bạn có thể có ý tưởng.
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
}
Tôi không biết biểu thức này hoạt động như thế nào? Bất kỳ ý tưởng làm thế nào điều này là có thể?
Cảm ơn.
Tôi có cùng một vấn đề với ngoại lệ không có phương thức __get được khai báo và nó cũng có thể được sử dụng, xem: http: //stackoverflow.com/questions/23183327/dynamically-adding-new-properties-in- php – user3505400