W Magento 2 $this
zmienna nie odnosi się już do obiektu bloku szablonu. Odnosi się do klasy szablonów
Magento\Framework\View\TemplateEngine\Php
Jednak ta klasa szablonów ma __call
metodę przekazywania
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Które zapewniają, że wszelkie wywołania metod przechodzą do faktycznego bloku. To wyjaśnia również, dlaczego nie można wywoływać metod chronionych z phtml
szablonów.
Oprócz tego każdy (myślę?) Szablon ma zmienną o nazwie $block
zapełniona, która również odnosi się do obiektu bloku rodzica. Możesz to zobaczyć w szablonie listy Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
gdzie $block
używana jest zmienna, ale nigdy nie została wyraźnie zdefiniowana.
Czy poza różnicami wspomnianymi powyżej jest jakaś różnica między użyciem jednej techniki nad drugą? tj. Czy oba $block
i $this->currentBlock
odnoszą się do tego samego obiektu?