PHP静态属性和const覆盖

时间:2019-04-21 11:02:14

标签: php static

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

我创建了一个父类(示例为A)和继承类(示例为B)。 class A定义了protected const(名为CST)。 class B也会覆盖此const。

调用从A继承的显示self::CST的方法类B时,打印的值是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()在用B::printCST()调用时显示2,而无需在class B中重写该方法,并且可以提高OOP的代码可重用性?

1 个答案:

答案 0 :(得分:1)

Dharman建议使用static::CST代替self::CST

这是解决我问题的方法。