控制器输出变量到前台的 render方法构造
<?php
class Controller
{
public function render($viewName, $data=array())
{
$viewName = THEME.$viewName.'.php';
if(!is_file($viewName))
echo "The template file '$viewName' does not exist.";
if (!empty($data)) {
extract($data, EXTR_PREFIX_SAME,'data'); # @1
}
ob_start(); # @2
ob_implicit_flush(0); # @3
require($viewName);
echo ob_get_clean();exit; # @4
}
}
@1. extract() 函数
<?php
$data = array('one'=>1, 'two'=>2, 'three'=>3);
$num = extract($data);
foreach ($data as $k => $v) {
echo $$k;
echo '***';
}
var_dump($num);
# extract()
# 函数从数组中将变量导入到当前的符号表。
# 该函数使用数组键名作为变量名,使用数组键值作为变量值。
# 针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
# 该函数返回成功设置的变量数目。
@2.ob_start()
打开输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函 数用于处理输出结果信息
@3.ob_implicit_flush()
将打开或关闭绝对(隐式)刷送。绝对(隐式)刷送将导致在每次输出调用后有一次刷送操作,以便不再需要对 flush() 的显式调用。
flush() 刷新输出缓冲,此函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
@4.ob_get_clean()
获取缓冲区内容输出后清空缓冲区内容。