Php:例外:什么?(即:何时使用和何时不使用…)

Php:例外:什么?(即:何时使用和何时不使用…),php,exception,Php,Exception,我的问题是关于Php异常的正确用法 我的Php应用程序是一个API服务器。 我的代码库非常清晰,嵌套调用的深度为5-6级。 当然,异常是处理错误的非常方便的方法, 由于您不必在函数调用的每个级别上处理所有错误条件 为了更好地解释我的意思,我在下面举个例子 这是我的顶层代码(“路由器”)的简化摘录: 这是我的底层代码(“db”)的简化摘录: 我认为这是一个典型且有效的有用异常处理示例:在代码库底层的致命错误上,错误会自动弹出到主错误处理函数。这里真正的优势是我不必在整个函数代码链中处理错误条件,从

我的问题是关于Php
异常的正确用法

我的Php应用程序是一个API服务器。 我的代码库非常清晰,嵌套调用的深度为5-6级。
当然,异常是处理错误的非常方便的方法, 由于您不必在函数调用的每个级别上处理所有错误条件

为了更好地解释我的意思,我在下面举个例子

这是我的顶层代码(“路由器”)的简化摘录:

这是我的底层代码(“db”)的简化摘录:

我认为这是一个典型且有效的有用异常处理示例:在代码库底层的致命错误上,错误会自动弹出到主错误处理函数。这里真正的优势是我不必在整个函数代码链中处理错误条件,从路由器级到数据库级

<>但是,如果我应该在我的函数栈中间更广泛地使用异常呢?例如:

class PersonsController {
  ...

  public function sync() {
    if (!mkdir($d, 0777)) {
      throw new Exception("Can't create folder $d");
    }
  }

  ...
}
class PersonsController {
  ...

  public function sync() {
    if (!mkdir($d, 0777)) {dir: DEBUG ONLY!
      return -1; # this error code will have to be handled upper in the stack...
    }
  }

  ...
}
而不是,例如:

class PersonsController {
  ...

  public function sync() {
    if (!mkdir($d, 0777)) {
      throw new Exception("Can't create folder $d");
    }
  }

  ...
}
class PersonsController {
  ...

  public function sync() {
    if (!mkdir($d, 0777)) {dir: DEBUG ONLY!
      return -1; # this error code will have to be handled upper in the stack...
    }
  }

  ...
}

问题是:在Php非平凡项目中使用
异常的范围有多广?

异常的使用没有限制。我会在
sync()
嵌套深度中抛出一个异常,这通常是更喜欢和广泛使用异常的充分理由。否则,这有点像一个参考/意见问题。(例外情况主要针对几乎致命的问题,最好是在有远程可行性的情况下使用它们来实现可恢复性,但不应被误用于普通信号或开发时断言。)