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