首页 > 解决方案 > PHP 静态属性和 const 覆盖

问题描述

我想创建一个类继承(扩展)另一个 PHP 类,该类具有我想在我的扩展类中覆盖的受保护的 const。

我创建了一个父类(例如 A)和一个继承类(例如 B)。class A定义了一个protected const(命名为 CST)。class B也覆盖这个常量。

当调用从 A 继承的显示 的方法类 B 时self::CST,打印的值是来自 A 的 CST 值,而不是在 B 中覆盖的 const CST。

我使用名为 的静态属性观察到相同的行为$var

似乎self方法中使用的总是指定义类(在我的示例中为 A),而不是用于调用静态方法的类。

class A
{
        protected static $var = 1;
        protected const CST = 1;

        public static function printVar()
        {
                print self::$var . "\n";
        }

        public static function printCST()
        {
                print self::CST . "\n";
        }

}

class B extends A
{
        protected static $var = 2;
        protected const CST =2;
}

A::printVar();
A::printCST();
B::printVar();
B::printCST();

有没有办法允许我的静态方法printCST()在调用时显示 2B::printCST()而无需重写方法class B并有利于 OOP 的代码可重用性?

标签: phpstatic

解决方案


Dharman 建议使用static::CST而不是self::CST.

这是我的问题的解决方案。


推荐阅读