Php 避免幻数而不创建依赖项

Php 避免幻数而不创建依赖项,php,dependency-injection,enums,tightly-coupled-code,Php,Dependency Injection,Enums,Tightly Coupled Code,我正在为我正在使用的API创建一个错误管理器。其思想是,它提供了一个可从API返回的错误代码存储区,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少必需的值) 我最初的做法是: $this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD); 但是,这会在我要设置错误的任何位置创建对error codes类的依赖关系 另一种选择是: $this->_errorManager->setError(100);

我正在为我正在使用的API创建一个错误管理器。其思想是,它提供了一个可从API返回的错误代码存储区,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少必需的值)

我最初的做法是:

$this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD);
但是,这会在我要设置错误的任何位置创建对error codes类的依赖关系

另一种选择是:

$this->_errorManager->setError(100);
但是现在我有一个数字坐在我的代码中间,没有任何意义。

虽然我能想到这个特定问题的解决方案,但在其他情况下,我会想使用“枚举”,我想不出一个不紧密耦合类的解决方案


有没有更好的方法,或者我可以采取不同的方法来消除幻数?或者紧密耦合是我必须接受和考虑的情况下的情况下?

< P>这是期望的耦合。虽然让应用程序和它的错误管理器松散耦合是一个好主意,但是没有理由将应用程序和它的错误代码分开,它们属于一起

依赖关系:

+-----------------------+
|Application error codes|<------------+
+-----------------------+             |
           ^                          |
           |                          |
+----------+----------+               |
|Application component|               |
+----------+----------+               |
           |                          |
           v                          |
+-----------------------+     +-------+-----+
|Error handler interface|<|---+Error handler|
+-----------------------+     +-------------+
+-----------------------+
|应用程序错误代码|您可以使用“预处理器”宏和生成文件清除其中一些障碍。预处理器宏由提供

假设您维护了这样一个错误代码文件

   define(`ERR_REQUIRED_FIELD',`100')dnl
然后,您可以使用英文错误“constant”编写PHP代码

并在makefile中包含一行,该行通过m4运行这两个文件。管理这一点的方法不止一种。(为了简单起见,我省略了makefile,只是通过m4运行我的测试文件。)

这确实引入了依赖性;php文件将全部依赖于错误代码文件。但是它是一个很小的依赖项,可以通过makefile轻松管理。实际上,我可能会构建一个错误代码文件,如下所示

ERR_DISK_FULL
ERR_REQUIRED_FIELD
ERR_MISSING_ARG
并使用文本实用程序和
make

  • 生成m4宏定义,或
  • 建立错误代码模块的定义
数值等于行号;这保证了您永远不会有重复的错误代码

我不会真的称之为“耦合”,因为
ErrorCodes
没有任何行为。这是一个很好的实践,绝对不应该有这个词的负面含义。您可能希望将其视为“作为两个物理类实现的一个逻辑实体”,而不是“耦合在一起的两个逻辑实体”。
$ m4 test.php.m4 > test.php
$ cat test.php
$this->_errorManager->setError(100);
ERR_DISK_FULL
ERR_REQUIRED_FIELD
ERR_MISSING_ARG