2012-05-25 3 views
0

Я работал над этим book, и я обнаружил неожиданную ситуацию.PHP Try Catch Buffer

При работе в гибридном файле PHP/HTML в книге говорится, что если я использую PHP try/catch без объекта ob buffer, и если есть ошибка где-то посередине файла, двигатель PHP выиграл Невозможно достичь строки catch {}, так как какой-то вывод уже отправлен в браузер. Книга затем говорит, что эта ситуация может быть исправлена ​​с помощью * ob_start(), ob_end_clean() и ob_end_flush() *

Однако, когда я играл с образцом кода книги, то попытка/улов работал просто отлично без буферный материал ob. Говоря просто отлично, я имею в виду, что если есть исключение, можно было бы достичь и вывести цепочку catch {} без проблем.

Я использовал Linode VPS для тестирования, версия PHP - 5.3.2. Я настроил VPS с помощью обычного скрипта Linode.

Почему? :)

+2

Это заявление не делает много смысла для меня ... – deceze

+0

сделать верить всему, что вы читаете. –

+0

Я бы тщательно перечитал, что он говорит, включая весь соответствующий контекст, который пришел перед заявлением.Я сомневаюсь, что опубликованная книга скажет что-то не так, так что это, скорее всего, ваша интерпретация. – goat

ответ

2

Это заявление - чепуха. PHP try..catch работает так же, как и следовало ожидать, независимо от вывода, который был отправлен или еще не отправлен в браузер.

Увидев, что даже errata to that book содержит ошибки, я бы сказал, что это просто не очень хорошая книга, и я не удивлен, что в ней содержатся неправильные утверждения. Просто очень быстрый взгляд показывает:

На этапе 4, третья строка кода следует читать следующим образом:

if ($_POST && isset($missing) && !empty($missing)) { 

Нет, он должен на самом деле читать:

if ($_POST && !empty($missing)) { 

или

if ($_POST && $missing) { 

По-видимому, автор не понимает how to use empty.

Далее:

Открывающая фигурная скобка отсутствует в конце строки 4 кода в шаге 2. Должно быть:

if ([email protected]('includes/connection.inc.php')) { 

Это попахивает плохой практики и должен быть переписан:

if (!file_exists('includes/connection.inc.php')) { 

или:

require_once 'includes/connection.inc.php'; 

Я уверен, что больше ... :)

+0

(Справедливости ради, это исправление к первому изданию с 2006 года. Я не могу сказать, исправлены ли ошибки ошибок в втором издании. Однако, глядя на некоторые комментарии на Amazon, все еще есть проблемы ...) – deceze

Смежные вопросы