Dans Magento 2, la $thisvariable ne fait plus référence à l'objet bloc d'un modèle. Il fait référence à une classe de modèle
Magento\Framework\View\TemplateEngine\Php
Cependant, cette classe de modèle possède une __callméthode passthrough
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Ce qui garantit que tous les appels de méthode atteignent le bloc réel. Cela explique également pourquoi vous ne pouvez pas appeler des méthodes protégées à partir de phtmlmodèles.
En plus de cela, chaque modèle (je pense?) A une variable nommée $blockpeuplée, qui fait également référence à l'objet bloc parent. Vous pouvez voir cela en cours d'utilisation dans le modèle de liste de Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
où la $blockvariable est utilisée, mais jamais explicitement définie.
Outre les différences mentionnées ci-dessus, existe-t-il une différence entre l'utilisation d'une technique par rapport à l'autre? ie Faire les deux $blocket se $this->currentBlockréférer au même objet?