类从具有相同专有名称的抽象类扩展

时间:2016-03-30 16:38:36

标签: php oop inheritance abstract-class

所以这是我的班级宣言

abstract class person {
    const NAME='person';
    public static function get_name(){
        return self::NAME;
    }
    abstract public function get_description();
}

class me extends person{
    const NAME = "me";

    public function get_description(){
        return "this describe " . self::NAME;
    }
}

正如您所看到的,const类名在我和Classes人员中都被声明了两次。 我在类“person”中声明它,因为它是我们在方法get_name()的实现中使用它的地方 我也在班级“我”中宣布它,因为我希望得到“我”的名字。

所以当我打电话时

echo me::get_name() 

我希望它返回“我”

实际上它返回“人”所以我在这里失踪所以它会返回“我”。

由于

1 个答案:

答案 0 :(得分:1)

将您的抽象方法更改为:

abstract class person {
    public static function get_name(){
        return static::NAME;
    }
}

这将在PHP中使用后期静态绑定,如文档中所述: http://php.net/manual/en/language.oop5.late-static-bindings.php