AnrDaemon
Продвинутый новичок
По ходу написания одной штучки понадобилось обернуть ошибку в исключение. Пока придумалось вот такое:
Вывод получается в виде
Это очень коряво?
P.S.
Пишу враппер для XML Parser. (XMLReader вообще непонятно как работает, и код с ним превращается в дикий ужас. XMLDOM не годится - входной поток может быть совсем любых размеров.)
PHP:
final class XMLParserException extends Exception
{
protected $srcFile;
protected $srcLine;
protected $srcColumn;
protected $srcIndex;
public function __construct($parser, SplFileObject $file = NULL)
{
$this->code = xml_get_error_code($parser);
if(false === $this->code)
throw new BadMethodCallException('This is not a valid xml_parser resource.');
parent::__construct(xml_error_string($this->code), $this->code);
$this->srcFile = $file ? $file->getPathname() : '(data stream)';
$this->srcLine = xml_get_current_line_number($parser);
$this->srcColumn = xml_get_current_column_number($parser);
$this->srcIndex = xml_get_current_byte_index($parser);
}
public function __toString()
{
return "XML Parser error '{$this->message}' in {$this->srcFile}:{$this->srcIndex}({$this->srcLine},{$this->srcColumn})\n" .
"Stack trace:\n" . $this->getTraceAsString();
}
}
Код:
PHP Fatal error: Uncaught XML Parser error 'Mismatched tag' in php://stdin:2540(22,21)
Stack trace:
#0 …/xml.php(95): xml->parse(' </secto...', false)
#1 …/xml.php(135): xml->parseFile('php://stdin')
#2 {main}
thrown in …/xml.php on line 105
P.S.
Пишу враппер для XML Parser. (XMLReader вообще непонятно как работает, и код с ним превращается в дикий ужас. XMLDOM не годится - входной поток может быть совсем любых размеров.)