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