我应该如何在PHP中保留常量

Ale*_*one 10 php enums

现在我在我的项目中有大量的常量字符串和枚举.从一开始我就使用以下方法(伪php示例代码):

class Constants implements iStatuses, iEmailTypes {
}

interface iStatuses {
    const STATUS_NEW = 1;
    cosnt STATUS_UPDATED =2;
    ...
}

interface iEmailTypes {
    const EMAIL_TYPE_NEW = 1;
    const EMAIL_TYPE_UPDATED =2;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这种方法允许我在代码中的任何地方以下列方式获取常量,因为我在index.php中包含了"常量"类.

$this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW);
Run Code Online (Sandbox Code Playgroud)

但是,我完全可以看到这种方法的缺点:

  1. 常量类重载了大量的枚举和常量,很难保持正常.命名约定有助于解决它,但我不喜欢这样,因为它需要额外的思考来确定我需要的常量
  2. 常量类太大而且凌乱
  3. 我需要跟踪所有接口,由Cosntants类实现.

由于我的项目现在变得越来越大,我们需要将它与另一个项目的代码合并,因此需要更改类Constants方法.但是,我根据该类获得了太多依赖项.我应该如何重新构造该方法,以免破坏使用常量类值的旧代码.

请分享您的想法和建议,如何改进我的"常数"方法,或确认它是不错的,我应该支持它.

先感谢您.

Ali*_*Ali 10

为什么不为每个上下文设置常量类.即

class Statuses 
{
    const STATUS_NEW = 1;
    const STATUS_UPDATED =2;
    ...
}

class EmailTypes 
{
    const EMAIL_TYPE_NEW = 1;
    const EMAIL_TYPE_UPDATED =2;
    ...
}
Run Code Online (Sandbox Code Playgroud)

稍后,当您或其他程序员想要为您的应用程序做出贡献时,他们可以轻松地检查他们期望的主题的相关常量,而不是查看一个大的常量池.

.eg一旦在电子邮件类型中寻找一个标志,我希望在其中找到它EmailType::,如果它不在那里,请自信地将它添加到同一个类中.

  • 我建议甚至摆脱多余的前缀.`状态::新'会做得很好. (3认同)