En Magento 2, la $thisvariable ya no hace referencia al objeto de bloque de una plantilla. Se refiere a una clase de plantilla.
Magento\Framework\View\TemplateEngine\Php
Sin embargo, esta clase de plantilla tiene un __callmétodo passthrough
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Lo que garantiza que cualquier llamada a un método llegue al bloque real. Esto también explica por qué no puede llamar a métodos protegidos desde phtmlplantillas.
Sin embargo, además de esto, cada plantilla (¿creo?) Tiene una variable denominada $blockpoblada, que también se refiere al objeto de bloque principal. Puede ver esto en uso en la plantilla de lista de Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
donde $blockse usa la variable, pero nunca se define explícitamente.
Aparte de las diferencias mencionadas anteriormente, ¿hay alguna diferencia entre usar una técnica sobre la otra? es decir, ¿ambas cosas $blocky se $this->currentBlockrefieren al mismo objeto?