繁体   English   中英

基本的Yii概念:$这个定义在哪里?

[英]Basic Yii Concept: Where is $this defined?

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

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

我只想知道$this来自哪里。 据我所知, $this只能在类的范围内使用。 但是,我看到这里没有实现任何课程,所以有人可以告诉我Yii如何为我做这个吗?

$this这里指的是当前的控制器类。 如果你在components / Controller.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在方法内部,它实际上进入对象范围。 所以this代表一些渲染temlate的View对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM