php引入模板時對ob類函數的使用

來源:互聯網
上載者:User
最近在瞭解php啟動並執行一些原理,一般php都是通過controller調用模板檔案,來顯示頁面,同時,controller裡面會一些變數的值也會賦給模板檔案,我使用template.php檔案作為模板檔案,所以在模板檔案中直接使用php的文法就可以顯示controller裡面賦值過來的變數。通過查看CI架構的代碼他會先開啟ob_start,然後引入模板檔案template.php,最後返回ob_get_clean(),如下面顯示

ob_start();include($_ci_path);$buffer = ob_get_contents();@ob_end_clean();return $buffer;

同時,我看公司內部架構的代碼原理也基本是一樣的,我現在現在想知道,使用ob等一系列函數有什麼用,感覺只是單純的include檔案就可以賦值過去了。

回複內容:

最近在瞭解php啟動並執行一些原理,一般php都是通過controller調用模板檔案,來顯示頁面,同時,controller裡面會一些變數的值也會賦給模板檔案,我使用template.php檔案作為模板檔案,所以在模板檔案中直接使用php的文法就可以顯示controller裡面賦值過來的變數。通過查看CI架構的代碼他會先開啟ob_start,然後引入模板檔案template.php,最後返回ob_get_clean(),如下面顯示

ob_start();include($_ci_path);$buffer = ob_get_contents();@ob_end_clean();return $buffer;

同時,我看公司內部架構的代碼原理也基本是一樣的,我現在現在想知道,使用ob等一系列函數有什麼用,感覺只是單純的include檔案就可以賦值過去了。

function render($template, array $var = array()) {    extract($var);                // 提取數組中的變數(你關注的問題就在這裡)    ob_end_clean();               // 關閉頂層的輸出緩衝區內容    ob_start();                   // 開始一個新的緩衝區    require "$template";          // 載入視圖view    $view = ob_get_contents();    // 獲得緩衝區的內容    ob_end_clean();               // 關閉緩衝區    ob_start();                   // 開始新的緩衝區,給後面的程式用    return $view;                 // 返迴文本,此處也可以直接echo輸出}

歐巴系列函數還是很有用的,你看控制器調用render渲染視圖後,拿到的是HTML,你可以把這些HTML寫入成靜態檔案快取起來,或者替換HTML裡的一些東西後輸出,很方便.
echo render('index.php', $data);

緩衝區都作用還是蠻大的。比如你要儲存用戶端的資訊;使用使用傳送檔案頭資訊不對header或者setcookie產生影響等

我只能理解為,你沒明白include是幹嘛的

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.