为什么模板可以直接使用$ this关键字?

use*_*320 4 php magento

我是PHP的新手; 今天我在Magento中看到了一些代码如下top.phtml.

<?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?>
<?php if($_menu): ?>
<div class="nav-container">
    <ul id="nav">
        <!--NEW HOME LINK -->
        <li class="home"><a href="<?php echo $this->getUrl('') ?>"><?php echo $this->__('Home') ?></a>"</li>
        <!--NEW HOME LINK -->
        <?php echo $_menu ?>
    </ul>
</div>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud)

我知道$this是自己的class,它只在类中用来引用方法或属性,在上面的代码中,没有定义类,为什么它可以直接使用$ this关键字?什么$this->__('Home')代表什么?

Gor*_*don 5

因为你标记了这个你可能有类似的类Mage_Catalog_Block_Navigation.至少,这些方法暗示了这一点.现在,我对Magento没有任何线索,但是这个类从Mage_Core_Block_Template那个类扩展而来,你有fetchView方法,在某些时候它

include $includeFilePath;
Run Code Online (Sandbox Code Playgroud)

include方法内部进行编码时,您可以访问$this包含的文件代码,因为它是在该实例的范围内进行评估的:

包含文件时,它包含的代码将继承发生包含的行的变量范围.从那时起,调用文件中该行可用的任何变量都将在被调用文件中可用.但是,包含文件中定义的所有函数和类都具有全局范围.

一般例子:

class Template
…
    public function render($templateFile)
    {
        include $templateFile;
    }
    public function ___($stringToTranslate)
    {
        // translates $stringToTranslate somehow
    }
 }
Run Code Online (Sandbox Code Playgroud)

请注意," $this不属于self该类"只是部分正确.self也是一个关键字和php,但self实际上是指类,$this指的是一个类的实例.