Magento 2 Templates:使用`$ block`或`$ this`?
在Magento 2中,该$this变量不再引用模板的块对象。它指的是模板类 Magento\Framework\View\TemplateEngine\Php 但是,此模板类具有传递__call方法 #File: vendor/magento/framework/View/TemplateEngine/Php.php public function __call($method, $args) { return call_user_func_array([$this->_currentBlock, $method], $args); } 这样可以确保任何方法调用都可以到达实际的块。这也解释了为什么不能从phtml模板调用受保护的方法。 但是除此之外,每个(我认为吗?)模板都有一个名为$blockpopulated 的变量,该变量也引用父块对象。您可以在Magento的列表模板中看到此用法 #File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml //... $_productCollection = $block->getLoadedProductCollection(); 使用$block变量但从未明确定义的位置。 除了上述差异之外,使用一种技术与另一种技术之间是否有区别?即两者都做$block,并$this->currentBlock指向同一个对象吗?