PHP类常量的单字母前缀?

kei*_*ant 4 php constants

我注意到很多(所有?)PHP常量都有一个单字母前缀,比如E_NOTICE,T_STRING等等.当定义一组彼此协同工作的类常量时,你更愿意遵循类似的做法,或者你更喜欢更加冗长?

class Foo {
    // let's say 'I' means "input" or some other relevant word
    const I_STRING = 'string';
    const I_INTEGER = 'integer';
    const I_FLOAT = 'float';
}
Run Code Online (Sandbox Code Playgroud)

要么

class Bar {
    const INPUT_STRING = 'string';
    const INPUT_INTEGER = 'integer';
    const INPUT_FLOAT = 'float';
}
Run Code Online (Sandbox Code Playgroud)

lee*_*ers 6

直到5.3 PHP仅限于一个全局命名空间.这意味着任何用define语言声明或内置于语言中的常量都需要一个前缀来自行分区 - 命名空间便宜,如果你愿意的话.

关于常量本身:虽然比前者E_NOTICE更容易打字ERROR_NOTICE,但主要缺点是不能自我记录.在全局上下文中,不仅需要按前缀对常量进行分区,这些前缀也应尽可能具有描述性.

类常量是一个稍微不同的野兽,因为你总是按类名引用它们 - 分区将被内置.所以你最终会得到 Account::STATUS_CONFIRMEDAccount::STATUS_BANNED.但是,如果我打算拥有几十状态,我会把这些在自己的班级,例如AccountStatus::CONFIRMED,AccountStatus::BANNED等等.

无论您为常量决定什么命名约定,主要考虑因素都是分区和自我记录的名称(详细程度).