最近在瞭解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是幹嘛的