8

使用 foreach() 循环和在此循环内使用 ob_start() 和 ob_get_clean() 循环时遇到问题。

这是我的功能:

protected function renderEmail() {
$template = $this->_case.".php";
if(is_file($this->_dir.DS.$template)) {
    ob_start();
    if(!empty($this->_records)) {               
        foreach($this->_records as $key => $value) {
            ${$key} = $value;
        }
    }
    require_once($this->_dir.DS.$template);
    return ob_get_clean();
} else {
    $this->_errors[] = "Email template not found";
    return false;
} }

这个函数基本上是生成电子邮件的内容,然后返回它。

我遇到的问题是,当我遍历多个电子邮件地址时 - 发送相同的电子邮件内容 - 只有第一个返回内容 - 以下是空白 - 知道为什么吗?

4

3 回答 3

21

好的 - 你不会相信 - 一旦我发布了这个问题 - 在我意识到问题出在之后 - 我正在使用 require_once() 函数 - 它可以防止再次包含相同的文件 - 一旦更改为包含() 一切正常!

于 2010-11-03T13:17:56.437 回答
2

每次你要在一个循环中多次使用同一个文件时,你永远不应该使用 require_once() 或 include_once,而是使用'include',一切都会好起来的!

于 2018-03-10T20:59:33.823 回答
0

为什么要循环?

extract($this->_records);

看起来比

foreach($this->_records as $key => $value) {
    ${$key} = $value;
}

和本地人

var_dump 有时会很有帮助(下次遇到这样的麻烦时):)

于 2010-11-03T14:33:19.147 回答