php - 在 PHP 中使用类常量和覆盖

标签 php oop overriding class-constants

如果我有一个类结构,其值可以为 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/

相关文章:

css - 上下文相关的 CSS 样式

c++ - 抽象类,继承和虚拟析构函数

php - 如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件

php - MySQL - 每个类别都有一个单独的 id

使用 super() 时不调用 Python 多重继承构造函数

android - DBAdapter设计问题

delphi - 我可以继承一个具有相同名称的类并在没有单位前缀的其他单位中自由使用它吗?

php - 如何在创建 session 时获取两个字段?

php - 插入数据库不起作用

C# "Semi-Generic"接口(interface)?