这让我的思绪扭曲了。很明显,PHP甚至在知道存在问题之前无法提前处理。
我在文档的标题中有这个:
<? $site = new core();
register_shutdown_function(shutdown);
echo $site->insert_to_header(); ?>
然后再往下,故意放:
echo $test;
创建警告。这将转到shutdown();
,如下所示:
class core {
function shutdown() {
$a = error_get_last();
if ($a == null) {
echo "No errors";
} else {
core::insert_to_header_cache('<link rel="stylesheet" href="core.css" type="text/css" />');
core::insert_to_body_cache('<div class="error-handler"><h3>Error!</h3>
<br/>Error type: <strong>' . $a[type] . '</strong>
<br/>Error message: <strong>' . $a[message] . '</strong>
<br/>Located in: <strong>' . $a[file] . '</strong>
<br/>Line: <strong>' . $a[line] . '</strong>
</div>');
}
}
//TODO Teleport variables to here, without doing that beforehand, this whole thing is broken :(
function insert_to_header_cache($insertion ='') {
$headercache += $insertion . '/n';
return true;
}
function insert_to_body_cache($insertion ='') {
$bodycache += $insertion . '/n';
return true;
}
function insert_to_header() {
global $headercache;
echo $headercache;
return true;
}
function insert_to_body() {
global $bodycache;
return $bodycache;
}
}
我的问题是,如果我的insert_to_header_cache
函数已经超过该点,我怎样才能将其输出回标题?
请记住,我意识到呼叫全局$bodycache
并且$headercache
无效,但这不是问题所在。事先在这里回应任何事情都行不通。因为秩序,我知道的很多。
提前致谢,
埃文哈里森答案 0 :(得分:2)
您可以使用输出缓冲。简而言之,它允许您在将其发送到客户端之前收集字符串中的所有输出,最后您可以操纵您拥有的输出并最终将其发送到客户端
答案 1 :(得分:1)
我的建议是,在完成所有处理并在Page
对象上执行脚本,样式表或其他资源的任何注入之前,不输出任何内容。如果你等到你的视图完全准备就绪,然后编译输出,你就可以更多地控制诸如head
标签之类的东西中包含的脚本和样式表。
以下是一个简单的例子,仅用于展示我所说的内容。正如我们在下面的问题中讨论的那样,您可以使用方法替换buildOutput()
方法,而是指向一个代表您的视图的PHP文件,并返回script
和{{1例如,URL。
stylesheet