如何从父类函数访问子类中定义的常量?

2022-08-30 10:39:56

我从 php.net 看到了这个例子:

<?php
class MyClass {

     const MY_CONST = "yonder";

     public function __construct() {

          $c = get_class( $this );
          echo $c::MY_CONST;
     }
}

class ChildClass extends MyClass {

     const MY_CONST = "bar";
}

$x = new ChildClass(); // prints 'bar'
$y = new MyClass(); // prints 'yonder'
?>

但$c::MY_CONST仅在版本 5.3.0 或更高版本中识别。我正在写的课程可能会分发很多。

基本上,我已经在ChildClass中定义了一个常量,MyClass(父类)中的一个函数需要使用该常量。有什么想法吗?


答案 1

如何使用 ?static::MY_CONST


答案 2

从 php 5.3 开始:

static::MY_CONST


有关静态的更多详细信息

在本例中,关键字 static 是对实际调用的类的引用。

这说明了 和 之间的区别:static $varstatic::$varself::$var

class Base {
    const VALUE = 'base';

    static function testSelf() {
        // Output is always 'base', because `self::` is always class Base
        return self::VALUE;
    }

    static function testStatic() {
        // Output is variable: `static::` is a reference to the called class.
        return static::VALUE;
    }
}

class Child extends Base {
    const VALUE = 'child';
}

echo Base::testStatic();  // output: base
echo Base::testSelf();    // output: base

echo Child::testStatic(); // output: child
echo Child::testSelf();   // output: base

另请注意,关键字有 2 种完全不同的含义:static

class StaticDemo {
    static function demo() {
        // Type 1: `static` defines a static variable.
        static $Var = 'bar';

        // Type 2: `static::` is a reference to the called class.
        return static::VALUE;
    }
}

推荐