No Magento 2, a $thisvariá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 __callmé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 phtmlmodelos.
Além disso, todo modelo (eu acho?) Tem uma variável denominada $blockpreenchida, 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 $blockvariá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 $blocke se $this->currentBlockrefira ao mesmo objeto?