[英]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.