Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中保存常量_Php_Enums - Fatal编程技术网

如何在PHP中保存常量

如何在PHP中保存常量,php,enums,Php,Enums,现在我的项目中有大量的常量字符串和枚举。从一开始,我就使用以下方法(伪php示例代码): 这种方法允许我在代码中的任何地方以以下方式获取常量,因为我在index.php中包含了“constants”类 $this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW); 然而,我完全可以看到这种方法的缺点: Constants类重载了大量枚举和常量,很难获得正确的常量。命名约定有助于解决这个问题,但我不喜欢这样,因为它需要额外的思考来确定我需要什么常量 常

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

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

$this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW);
然而,我完全可以看到这种方法的缺点:

  • Constants类重载了大量枚举和常量,很难获得正确的常量。命名约定有助于解决这个问题,但我不喜欢这样,因为它需要额外的思考来确定我需要什么常量
  • 常量类太大太乱
  • 我需要跟踪所有接口,这些接口由Cosntants类实现
  • 由于我的项目现在变得越来越大,我们需要将其与另一个项目的代码合并,因此需要更改类常量方法。然而,我得到了太多基于该类的依赖项。我应该如何重新构造这种方法,以避免破坏使用常量类值的旧代码

    请分享您的想法和建议,如何改进我的“常量”方法,或者确认它非常好,我应该支持它


    提前谢谢。

    为什么不为每个上下文设置常量类呢。i、 e

    class Statuses 
    {
        const STATUS_NEW = 1;
        const STATUS_UPDATED =2;
        ...
    }
    
    class EmailTypes 
    {
        const EMAIL_TYPE_NEW = 1;
        const EMAIL_TYPE_UPDATED =2;
        ...
    }
    
    稍后,当您或其他程序员希望为您的应用程序做出贡献时,他们可以轻松地检查他们期望的主题的相关常量,而不是查看大量常量


    例如,一旦在电子邮件类型周围查找标志,我希望在
    EmailType::
    中找到它,如果没有,请自信地将其添加到同一类中。

    在不知道结构的其余部分的情况下很难回答,但我会在任何相关控制器(甚至实体)的顶部找到任何常量处理该区域的类。如果我想在多个控制器之间共享常量,该怎么办?是否严格要求在
    常量
    类下包含所有常量?我希望与每个类相关的常量可以通过该类访问(这也是内置PHP常量的存在方式)。@apokryfos我完全同意,你比我快了几秒钟。不,没有严格的要求,我只是在创建常量类时缺乏良好的经验。我明白你的建议,看起来不错。但我想知道是否有更好的方法来保存它们。这肯定比我的想法要好。但是,什么类应该做一些与常量相关的附加逻辑?例如,我有10种状态,其中一些是“完成”,意思是,如果电子邮件处于“已接受”状态,则无法更改为任何其他状态,而其中一些是“正在进行”,这意味着该状态将在以后发生更改。所以我需要一个Functcion isStatusFinal($status)。我应该像你建议的那样在Statuses类中实现吗?我甚至建议去掉多余的前缀<代码>状态::新建就可以了。
    class Statuses 
    {
        const STATUS_NEW = 1;
        const STATUS_UPDATED =2;
        ...
    }
    
    class EmailTypes 
    {
        const EMAIL_TYPE_NEW = 1;
        const EMAIL_TYPE_UPDATED =2;
        ...
    }