在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
模板调用受保护的方法。
但是除此之外,每个(我认为吗?)模板都有一个名为$block
populated 的变量,该变量也引用父块对象。您可以在Magento的列表模板中看到此用法
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
使用$block
变量但从未明确定义的位置。
除了上述差异之外,使用一种技术与另一种技术之间是否有区别?即两者都做$block
,并$this->currentBlock
指向同一个对象吗?