系统化PHP中的Web应用程序的错误代码?

use*_*841 6 php oop error-handling

我正在研究基于类的php web应用程序.我有一些对象正在交互的地方,并且我在某些情况下使用错误代码与最终用户进行通信 - 通常在表单值丢失或无效时.这些情况下,例外情况是没有根据的(我不确定我是否可以避免出现异常的情况).

在一个对象中,我有大约20个代码编号,每个代码编号对应于面向用户的消息,以及面向管理员/开发人员的消息,因此双方都知道发生了什么.现在我已经多次处理了代码,我发现很难快速找出我已经使用过的系列中的代码编号,所以我不小心创建了相互矛盾的代码.例如,我今天只用12,13,14和15做了.

我怎样才能更好地组织这个,所以我不会创建冲突的错误代码?我应该创建一个单独的类,errorCodes,它有一个包含所有类的所有错误代码的主列表,在整个Web应用程序中将它们系统化?或者,在适当的时候,每个对象应该有自己的一组错误代码,我只是在对象的注释中保留一个列表,在我进行时使用和更新它?


编辑:所以我喜欢在类中使用常量或命名常量的建议.这给了我一个地方,我以编程方式定义并跟踪错误代码及其消息.

下一个问题:我为这类错误代码和消息提供了什么样的接口?我是否triggerError(20)在类中执行某些操作,然后提供一个公共方法来返回错误代码,字符串常量以及面向用户和管理员的消息?

Pas*_*TIN 8

您可以创建一些为您的所有错误代码defines创建命名常量:

define('ERROR_CODE_SQL_QUERY', 1);
define('ERROR_CODE_PAGE_NOT_FOUND', 2);
define('ERROR_CODE_NOT_ALLOWED', 3);
// and so on
Run Code Online (Sandbox Code Playgroud)

然后,使用代码中的常量:

if ($errorCode == ERROR_CODE_SQL_QUERY) {
    // deal with SQL errors
}
Run Code Online (Sandbox Code Playgroud)


有了它,你的代码中没有任何地方你将使用数值:无处不在(除了在你输入defines 的on和only文件中),你将使用这些代码.

它的意思是 :

  • 减少错误风险,因为所有数值仅在一个文件中设置
  • 较少的错误风险,因为您将使用常量,这些常量具有指示其含义的名称
  • 而代码更容易阅读.


另一个想法可能是创建一个类来处理错误:

class Error {
    const CODE_SQL_QUERY = 1;
    const CODE_PAGE_NOT_FOUND = 2;
    const CODE_NOT_ALLOWED = 3;

    // Add some methods here, if needed
}
Run Code Online (Sandbox Code Playgroud)

然后,使用这样的东西:

if ($errorCode == Error::CODE_SQL_QUERY) {
    // deal with SQL errors
}
Run Code Online (Sandbox Code Playgroud)


哪一个最好

这可能是个人偏好的问题......如果您需要添加一些方法来处理错误,使用类可能会有用.另外,定义也是一个很好的解决方案.