No Magento 2, a $this
variável não se refere mais ao objeto de bloco de um modelo. Refere-se a uma classe de modelo
Magento\Framework\View\TemplateEngine\Php
No entanto, essa classe de modelo possui um __call
método de passagem
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
O que garante que qualquer chamada de método chegue ao bloco real. Isso também explica por que você não pode chamar métodos protegidos de phtml
modelos.
Além disso, todo modelo (eu acho?) Tem uma variável denominada $block
preenchida, que também se refere ao objeto de bloco pai. Você pode ver isso em uso no modelo de lista do Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
onde a $block
variável é usada, mas nunca definida explicitamente.
Além das diferenças mencionadas acima, existe alguma diferença entre usar uma técnica sobre a outra? ie Faça os dois $block
e se $this->currentBlock
refira ao mesmo objeto?