为什么 libxml_use_internal_errors(true) 不尊重 LIBXML_NOWARNING?

Why does libxml_use_internal_errors(true) not respect LIBXML_NOWARNING?

我想了解 libxml_use_internal_errors(true) 的工作原理。它似乎不尊重 LIBXML_NOWARNING 标志。

这里是一个使用 PHP 7.2.4.

的例子
libxml_use_internal_errors( false );
new SimpleXMLElement(
  '<DataSet xmlns="iminvalid"></DataSet>', 
  LIBXML_NOWARNING );
var_dump(sizeof(libxml_get_errors()));
// int(0)

不出所料,这些语句没有发出任何警告。由于 LIBXML_NOWARNING.

,命名空间警告被隐藏

然而,这:

libxml_use_internal_errors( true );
new SimpleXMLElement(
  '<?xml version="1.0" encoding="utf-8"?><DataSet xmlns="iminvalid"></DataSet>', 
  LIBXML_NOWARNING );
var_dump(sizeof(libxml_get_errors()));

// int(1)
// xmlns: URI iminvalid is not absolute

意外 returns 无效 uri 警告。 libxml_use_internal_errors( true ) 和隐藏 xml 解析警告怎么可能?

从 php 7.3.15 开始,它似乎可以正常工作。 两个示例均未显示警告,但第二个示例确实捕获了警告。该标志不会阻止通过函数捕获警告,它只会阻止警告显示在控制台或 Web 浏览器上。