Trong Magento 2, $thisbiến không còn tham chiếu đến đối tượng khối của mẫu. Nó đề cập đến một lớp mẫu
Magento\Framework\View\TemplateEngine\Php
Tuy nhiên, lớp mẫu này có một __callphương thức thông qua
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Mà đảm bảo bất kỳ cuộc gọi phương thức nào làm cho nó thông qua khối thực tế. Điều này cũng giải thích tại sao bạn không thể gọi các phương thức được bảo vệ từ các phtmlmẫu.
Ngoài ra, mặc dù vậy, mọi mẫu (tôi nghĩ?) Đều có một biến có tên là $blockpopated, cũng đề cập đến đối tượng khối cha. Bạn có thể thấy điều này được sử dụng trong mẫu danh sách của Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
trong đó $blockbiến được sử dụng, nhưng không bao giờ được xác định rõ ràng.
Khác với sự khác biệt được đề cập ở trên, có sự khác biệt nào giữa việc sử dụng một kỹ thuật này so với kỹ thuật kia không? tức là làm cả hai $blockvà $this->currentBlockđề cập đến cùng một đối tượng?