Я пишу класс PHP для генерации вывода HTML. По соображениям безопасности я должен убедиться, что ни один код не отправил вывод перед этим классом. Вот два варианта, о которых я подумал:
Вариант 1: как утверждение
if( !$this->headersSent ) {
assert( '!headers_sent()' );
$this->headersSent = true;
// ...
}
Вариант 2. Использование оператора if
и die()
if( !$this->headersSent ) {
if( headers_sent() ) {
die( 'For security, refusing to continue: headers already sent.' );
}
$this->headersSent = true;
// ...
}
Википедия говорит , «Утверждения должны использоваться для документирования логически невозможных ситуаций и обнаружения ошибок программирования».
- Этот класс является частью определенного приложения, и я считаю ошибкой программирования отправку вывода HTML без использования этого класса. Так что
assert()
следует использовать.
- С другой стороны, однажды это приложение может стать открытым исходным кодом, и кто-то может настроить его. У него могут быть отключены утверждения, и поэтому возникающая проблема безопасности может остаться незамеченной. Так что
die()
следует использовать.
Какой из них лучше практиковать?