ใน Magento 2 $this
ตัวแปรจะไม่อ้างอิงไปยังวัตถุบล็อกของเทมเพลตอีกต่อไป มันหมายถึงคลาสแม่แบบ
Magento\Framework\View\TemplateEngine\Php
อย่างไรก็ตามคลาสเทมเพลตนี้มี__call
วิธีการส่งผ่าน
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
ซึ่งทำให้แน่ใจว่าการเรียกใช้เมธอดทำให้ผ่านไปยังบล็อกจริง สิ่งนี้ยังอธิบายว่าทำไมคุณไม่สามารถเรียกวิธีการป้องกันจากphtml
แม่แบบ
นอกจากนี้แม้ว่าทุกแม่แบบ (ฉันคิดว่า?) มีตัวแปรชื่อ$block
เติมซึ่งยังหมายถึงวัตถุบล็อกผู้ปกครอง คุณสามารถดูสิ่งนี้ได้ในแม่แบบรายการของ Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
ที่ใช้$block
ตัวแปร แต่ไม่เคยกำหนดไว้อย่างชัดเจน
นอกเหนือจากความแตกต่างที่กล่าวถึงข้างต้นมีความแตกต่างระหว่างการใช้เทคนิคหนึ่งกับอีกเทคนิคหนึ่งหรือไม่? คือทำทั้งสองอย่าง$block
และ$this->currentBlock
อ้างถึงวัตถุเดียวกันหรือไม่?