【问题标题】:Difference between error_reporting() and ini_set('error_reporting')?error_reporting() 和 ini_set('error_reporting') 的区别?
【发布时间】:2010-12-29 15:08:31
【问题描述】:

在我的脚本中使用error_reporting()ini_set('error_reporting') 时,两者之间是否存在任何功能差异?一种方法优于另一种方法吗?

值得一提的是,我看到许多框架都使用error_reporting(),但这两个选项似乎只在运行时设置,然后在脚本执行后在 php.ini 中重置为默认值。

【问题讨论】:

    标签: php error-reporting


    【解决方案1】:

    唯一的小功能差异似乎是ini_set 在无法更改设置时返回false,而error_reporting 总是返回旧的错误级别。

    【讨论】:

    • 不完全是;当设置不存在时,ini_set 返回 false。它需要一个字符串,因此任何可以解释为字符串的东西都会被转换。例如,如果您将对象传递给它,PHP 会生成警告并返回 null,这与传递对象(即没有 __toString() 方法的对象)时 error_reporting 的行为相同。重点是,他的问题是ini_set('error_reporting')error_reporting() 之间的区别,而不是ini_set() 处理指令名称错误的方式。
    • 我应该澄清一下,当我说“它需要一个字符串”时,我指的是第二个参数,正在设置的设置的值,其他一切都指的是那个。
    • @Dereleased,我认为 ini_set 返回 false 是基于在 php.ini 中阻止在运行时更改某些设置的可能性。所以我假设如果在运行时更改错误级别在 php.ini 中被禁用(不确定这是否可能,但我认为是)ini_set() 将返回falseerror_reportingwill,至少根据手册, 总是返回旧的错误级别。
    【解决方案2】:

    “通往罗马的两条路”:ini_set('error_reporting', ) 覆盖了 php.ini 文件中设置的参数。 error_reporting() 接收级别编号或级别 ID

    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    

    这两个选项都会在脚本结束执行之前生效。下一个将再次使用 .ini 中定义的参数。

    【讨论】:

      【解决方案3】:

      它们在功能上是相同的,但如果您使用的 IDE 知道 PHP 函数名称,这是一种确保您不会意外输入要设置的指令名称的简单方法。

      来自PHP's Manual Entry for error_reporting() 的示例部分:

      // Same as error_reporting(E_ALL);
      ini_set('error_reporting', E_ALL);
      

      【讨论】:

      • 呸,我的 IDE (notepad++) 都弄错了。不过很好的意见。
      • 最近(也就是最近六年左右)我只用过Komodo(90%)和jEdit,他们都知道这些功能。
      【解决方案4】:

      此外,即使文档声明 error_reporting 的签名是:

      int error_reporting ([ int $level ] )
      

      ,这并不完全正确,因为您可以设置一个 string 并用ini_get 回读:

      error_reporting('123 hello world');
      
      var_dump(ini_get('error_reporting'));
      

      产生:

      string(15) "123 hello world"
      

      所以,error_reporting($x) 在语义上等价于ini_set('error_reporting', $x)

      并且error_reporting() 在语义上等同于(int)ini_get('error_reporting')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-13
        • 2011-08-28
        • 2018-04-12
        • 2016-03-24
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多