如果我有一个类结构,其值可以为 true 或 false,它不会改变,当前实现为变量,最好将它们更改为常量,例如:
class Parent {
const BOOL_CONST = false;
...
}
class SomeChild extends Parent {
const BOOL_CONST = true;
...
}
后来我有一个对象,它可以是该类层次结构中的任何类型,可以是父类或其子类之一,并且某些子类可能(例如“SomeChild”)已将值重载为 true。
有什么方法可以在不知道类的情况下访问常量吗?换句话说,我可以做类似的事情吗:
$object->BOOL_CONST
还是将这些值保留为变量会更好,即使它们真的不应该改变?
更新
我在上面改写了我的问题,以更好地表达我想问的问题。
最佳答案
Is there some way I can access the constant without knowing the class? In other words can I do something like:
是的,为了引用常量,您需要使用以下结构:
- self::NAME_OF_CONSTANT:给我一个在这个类中定义的常量;如果我没有定义它,从我的 parent 那里得到它
- static::NAME_OF_CONSTANT:仅给我一个在此类中定义的常量;永远不要向我的 parent 求助
- parent::NAME_OF_CONSTANT:仅给我父类中定义的常量;永远不要指望自己
顺便说一句,您使用了术语“重载”;但是,我相信您的意思是说“被覆盖”。重载在面向对象语言中具有不同的语义。
关于php - 在 PHP 中使用类常量和覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945642/