簡體   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