У 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
населених, яка також відноситься до батьківського об'єкта. Ви можете бачити це у використанні в шаблоні списку Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
де використовується $block
змінна, але ніколи прямо не визначена.
Крім відмінностей, згаданих вище, чи є різниця між використанням однієї техніки над іншою? тобто чи обидва $block
і $this->currentBlock
посилаються на один і той же об’єкт?