Ошибки -> исключения

indent

Новичок
Ошибки -> исключения

Обрадовавшись, что в PHP наконец-то появилась обработка исключений, хотел перековать все ошибки в исключения в соответствии с кодом, приведенным тут. Проблема в том, что если код, использующий DOM окружить try и catch, то одна ошибка становится исключением, остальные же продолжают отображаться обычными warning. Для ленивых код:
PHP:
<?php

class phpException extends exception {
    public function __construct($errno, $errstr, $errfile, $errline) {
        parent::__construct();
        $this->code = $errno;
        $this->message = $errstr;
        $this->file = $errfile;
        $this->line = $errline;
    }
}

function err2exc($errno, $errstr, $errfile, $errline) {
    throw new phpException($errno, $errstr, $errfile, $errline);
}

set_error_handler('err2exc', E_ALL & ~E_NOTICE &~ E_USER_NOTICE | E_STRICT);
error_reporting(E_ALL | E_STRICT);

try {
	$doc = DOMDocument::load('bad.xml');
} catch (Exception $e) {
	echo "Exception caught";
}

?>
Содержание bad.xml:

<?xml version="1.0"?>

<aaa>

<bbb>ddddd < </bbb>

</aaa

Результат:

Warning: DOMDocument::load() [function.load]: StartTag: invalid element name in file://.../bad.xml, line: 5 in .../exctest.php on line 26

Warning: DOMDocument::load() [function.load]: expected '>' in file://.../bad.xml, line: 7 in .../exctest.php on line 26
Exception caught



А по логике вещей этих ворнингов быть не должно... Или я что-то путаю?
 

itprog

Cruftsman
Похоже баг какой-то, работает все по логике если set_error_handler('err2exc', E_ALL);
 

indent

Новичок
Да вот и у меня подозрения. А к кому с этим багом идтить?
 

tony2001

TeaM PHPClub
http://bugs.php.net/bug.php?id=36878

пофиксено в CVS.

однако, всё равно есть нюанс (с):
процесс парсинга XML (очевидно) прервать нельзя, поэтому ошибки конвертируются в эксепшены, которые не прерывают выполнение, а замещают друг друга.
т.е. в эксепшене будет текст последней ошибки, а не первой, как можно было бы ожидать.
не думаю, что тут можно что-то поделать.. так работает libxml.
 

indent

Новичок
Не ожидал такой моментальной реакции. Спасибо!
Только я не совсем понял, почему они замещают друг друга
 
Сверху