我看到了一些行为ob_start()
,ob_end_*()
这似乎非常违反直觉。
本着整洁的精神,我的算法是:
- 打开缓冲区
- 做一些事情
- 将缓冲区保存为字符串
- 关闭缓冲区
对于第一个案例之外的每个循环案例,我在运行时收到以下通知。
注意:ob_end_clean():删除缓冲区失败。在第 21 行的 C:...\testing\TestOBError.php 中没有要删除的缓冲区
注意:ob_end_clean():删除缓冲区失败。在第 21 行的 C:...\testing\TestOBError.php 中没有要删除的缓冲区
注意:ob_end_clean():删除缓冲区失败。在第 21 行的 C:...\testing\TestOBError.php 中没有要删除的缓冲区
当前故事有效载荷:“一个”。
当前故事有效载荷:“两个”。
当前故事有效载荷:“三”。
当前故事有效载荷:“四”。
示例代码(TestOBError.php):
<?php
class Story {
public $payload;
public function __construct($payload) {
$this->payload = $payload;
}
}
$stories = array();
$stories[] = new Story('one');
$stories[] = new Story('two');
$stories[] = new Story('three');
$stories[] = new Story('four');
$foo = "";
foreach ($stories as $story) {
ob_start();
require 'TestOBError_Foo.php';
$foo .= ob_get_clean();
ob_end_clean();
}
print $foo;
?>
TestOBError_Foo.php 的内容:
<p>Current story payload: `<?php print $story->payload; ?>'.</p>
我只是滥用输出缓冲区吗?谁能告诉我这样做的“正确方法”?
我正在运行 PHP 版本 5.4.7。