ob_start() внутри цикла

У меня проблема при цикле с использованием цикла 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;
} }

Эта функция в основном генерирует содержимое письма и затем возвращает его.

У меня проблема, когда я перебираю несколько адресов электронной почты - чтобы отправить одно и то же содержимое электронной почты - только первый возвращает содержимое - следующие пустые - есть идеи, почему?

3 ответа

Хорошо - вы не поверите - как только я отправил этот вопрос - сразу после того, как я понял, в чем проблема - я использую функцию require_once() - которая предотвращает повторное включение того же файла - после того, как он был изменен, чтобы включить () все работает отлично!

Каждый раз, когда вы собираетесь использовать один и тот же файл несколько раз в цикле, вы никогда не должны использовать require_once() или include_once, вместо этого используйте "include", и все будет хорошо!

Почему циклы?

extract($this->_records);

выглядит немного короче

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

и родной в дополнение

и var_dump иногда очень помогает (в следующий раз вы столкнетесь с такими проблемами):)

Другие вопросы по тегам