基本 Yii 概念:在哪里定义$this



我正在看Yii Framework关于博客应用程序的教程。我正在理解的过程中,但我不明白一个主要组成部分:这是在特定.php视图文件的开头找到的。

<?php
$this->breadcrumbs=array(
    'Manage Posts',
);
?>

我只想知道$this从哪里来。据我了解,$this只有在类范围内才能使用。但是,我在这里没有看到实现的类,所以谁能启发我 Yii 如何为我做到这一点?

这里的$this指的是当前的控制器类。如果在组件/控制器.php中看到控制器,则还将看到$breadCrumbs=array();。请参阅视图的权威指南:

在视图脚本中,我们可以使用 $this 访问控制器实例。因此,我们可以通过计算视图中的 $this->propertyName 来拉入控制器的任何属性。

控制器最终使用 renderInternal 呈现视图。如果你看到该函数的源代码,你会看到php的require()

public function renderInternal($_viewFile_,$_data_=null,$_return_=false)
{
    // we use special variable names here to avoid conflict when extracting data
    if(is_array($_data_))
        extract($_data_,EXTR_PREFIX_SAME,'data');
    else
        $data=$_data_;
    if($_return_)
    {
        ob_start();
        ob_implicit_flush(false);
        require($_viewFile_);
        return ob_get_clean();
    }
    else
        require($_viewFile_);
}

由于使用了 require,因此此时$this可用于包含的代码:

包含文件时,它包含的代码将继承包含所在行的变量作用域。从该点开始,调用文件中该行的任何可用变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。

因此,当我们这样做$this->render('view');时,view将可以访问 $ this .

我很确定 Yii 将模板编译成类,所以在运行时你实际上有一个类。 有关详细信息,请查看__FILE__get_class($this)

如果这个模板只是在方法中require d,它实际上进入了对象范围。所以this代表一些呈现 temlate 的视图对象。

最新更新