我应该如何将我的常量保存在PHP

时间:2016-04-04 08:16:01

标签: 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;
    ...
}

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

$this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW);

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

  1. 常量类重载了大量的枚举和常量,很难保持正常。命名约定有助于解决它,但我不喜欢这个,因为它需要额外的思考来确定我需要的常量
  2. 常量类太大而且凌乱
  3. 我需要跟踪所有接口,由Cosntants类实现。
  4. 由于我的项目现在变得越来越大,我们需要将它与其他项目的代码合并,因此需要更改类Constants方法。但是,我根据该类获得了太多依赖项。我应该如何重构这种方法,以免破坏使用常量类值的旧代码。

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

    提前谢谢。

1 个答案:

答案 0 :(得分:11)

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

open syscall overhead is 24497
open syscall overhead is 13523
open syscall overhead is 9025
open syscall overhead is 5784
open syscall overhead is 26390

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

.e.g一旦在电子邮件类型中查找标记,我希望在class Statuses { const STATUS_NEW = 1; const STATUS_UPDATED =2; ... } class EmailTypes { const EMAIL_TYPE_NEW = 1; const EMAIL_TYPE_UPDATED =2; ... } 内找到它,如果不在那里,请自信将其添加到同一个类中。