В 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
относятся к одному и тому же объекту?