首頁  >  文章  >  後端開發  >  php引入模板時對ob類別函數的使用

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

WBOY
WBOY原創
2016-08-18 09:16:351288瀏覽

最近在了解php運作的一些原理,一般php都是透過controller呼叫模板文件,來顯示頁面,同時,controller裡面會一些變數的值也會賦給模板文件,我使用template.php檔案作為模板文件,所以在模板檔中直接使用php的語法就可以顯示controller裡面賦值過來的變數。透過查看CI框架的程式碼他會先開啟ob_start,然後引入模板檔案template.php,最後返回ob_get_clean(),如下面顯示

<code>ob_start();
include($_ci_path);
$buffer = ob_get_contents();
@ob_end_clean();
return $buffer;</code>

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

回覆內容:

最近在了解php運作的一些原理,一般php都是透過controller呼叫模板文件,來顯示頁面,同時,controller裡面會一些變數的值也會賦給模板文件,我使用template.php檔案作為模板文件,所以在模板檔中直接使用php的語法就可以顯示controller裡面賦值過來的變數。透過查看CI框架的程式碼他會先開啟ob_start,然後引入模板檔案template.php,最後返回ob_get_clean(),如下面顯示

<code>ob_start();
include($_ci_path);
$buffer = ob_get_contents();
@ob_end_clean();
return $buffer;</code>

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

<code>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输出
}</code>

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

緩衝區都作用還蠻大的。例如你要保存客戶端的資訊;使用使用發送文件頭資訊不對headersetcookie產生影響等

我只能理解為,你沒懂include是乾嘛的

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn