最近在了解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);
緩衝區都作用還蠻大的。例如你要保存客戶端的資訊;使用使用發送文件頭資訊不對header
或setcookie
產生影響等
我只能理解為,你沒懂include是乾嘛的