Обновление: этот ответ фактически не затрагивает проблему ОП. Мы продолжили дискуссию в чате (см. Комментарии по этому вопросу), и, похоже, OP удовлетворен объяснением, которое я дал там, и разъяснил себе их недоумение.
Как я и обещал в комментарии, это фрагмент кода, который приведет к сбою вашего кода. Это искусственно создано для этого обсуждения.
Однако, когда вы работаете над большим проектом, обработчик ошибок может быть установлен где-то в файле с глубоким включением (или каркасом), эффект unset($astring);
может быть достигнут опечаткой или просто забыв о сохранении значение в переменную, и конечный результат приходит неожиданно.
// Install an error handler that will output the error messages it gets
set_error_handler(
function($errno, $errstr) {
echo('The error #'.$errno.' happened. The message is: '.$errstr);
return FALSE;
},
E_NOTICE
);
// Ensure the notices won't show to the surface (they will pollute the
// script's output on screen only, they do not change the output buffer)
// You can use error_reporting(0) as well, it still works as expected.
error_reporting(E_ALL & ~E_NOTICE);
// Force PHP trigger an E_NOTICE
// the error handler installed above will kick in and mess the output
unset($astring);
// The innocent block of code
ob_start();
echo $astring;
$astring = ob_get_clean();
// Check the results
echo("================\n");
echo('The content of variable $astring is: [[['.$astring."]]]\n");
Простой ответ: ПОПРОБУЙТЕ ЭТО И ВИДЕТЬ. – RiggsFolly
@RiggsFolly, конечно, я сделал это, и в моих тестах это одно и то же, но это не означает, что нет других обстоятельств, когда это будет иначе. –
В любом случае, изначально у меня был более сложный вопрос об более сложной настройке, и я сводил ее к этой более простой. Я мог бы уменьшить его до еще более простого. Использует ли ob_start(); echo $ astring; $ astring = ob_get_clean(); 'может изменить значение $ astring? Я думаю, что ответ отрицательный. Если я тестирую простую строку, это не изменит строку. Это правда во всех обстоятельствах? Я отредактирую вопрос. Это простой, но я хочу получить авторитетный ответ. –