【问题标题】:PHP REGEX error handlingPHP 正则表达式错误处理
【发布时间】:2017-07-31 17:46:07
【问题描述】:

为什么 PHP 有 preg_last_error() 而不是仅仅抛出错误?

您在通过preg_replace() 执行正则表达式时可能遇到的一些错误会记录到 PHP 错误文件中。其他一些人保持沉默,您必须通过preg_last_error() 检查他们的存在。这是为什么呢?

例如,无效的 REGEX 将发送 PHP 警告。但是不会超过 preg JIT 堆栈限制,检测此错误的唯一方法是检查 preg_last_error() 返回值。

更多关于本主题后面错误的信息PHP PREG_JIT_STACKLIMIT_ERROR - inefficient regex

【问题讨论】:

  • 原因本质上是历史原因。 PHP 沿途收集了很多库,这就是为什么错误处理不连贯的原因,就此而言,甚至参数顺序在库之间或多或少是随机的。
  • LSerni 所说的。在一个完美的世界中,所有出错的东西都会抛出异常,或者以统一且可预测的方式设置错误指示器,但我们在 PHP 中没有。它只是一直试图给你一个答案——任何类型的答案!见eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design

标签: php error-handling


【解决方案1】:

从历史上看,PHP 没有可以抛出和捕获的异常。核心错误会使应用程序崩溃而无法恢复。

过去,有人坚信 PHP 只有在你搞砸了源代码时才应该抛出错误。在代码中编写无效的正则表达式是错误的正当理由。但是,由于 JSON 解码可能会因为传入其中的 数据 而失败,因此开发人员应该有一种方法来检查解析错误并在其应用程序中处理它们而不会导致应用程序崩溃。这种错误不是开发人员错误,而是数据错误。如果我们认为 JSON 扩展被添加到 PHP 5,那么这个理由是有道理的。

我的猜测是,如果在 PHP 7 中添加 JSON 扩展,那么它会默认抛出。 PHP 7 改变了 PHP 错误的概念以及人们对由于无效数据引发异常的态度。但是 PHP 中仍有一些函数和 API 默认不抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多