drf65218 2016-11-02 04:15
浏览 23
已采纳

PHP从父级访问Child的受保护值

I have this code that i want to do method abstraction in parent and child will define the property

class SuperClass{
    static protected $message = "This is the parent";

    public static function showMessage(){
        echo self::$message."<br/>";
    }
}

class SubClass1 extends SuperClass {
    static protected $message = "This is the first child";

}

class SubClass2 extends SuperClass {
    static protected $message = "This is the second child";
}

SuperClass::showMessage();
SubClass1::showMessage();
SubClass2::showMessage();

I would expect to see

This is the parent
This is the first child
This is the second child

But what i got is

This is the parent
This is the parent
This is the parent
  • 写回答

1条回答 默认 最新

  • dongtan9253 2016-11-02 04:23
    关注

    This is a very classical use-case of late static binding. Simply replace keyword "self" in the parent class by "static"

    class SuperClass{
        static protected $message = "This is the parent";
    
        public static function showMessage(){
            echo static::$message."<br/>";
        }
    }
    

    This will work for php 5.3+

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?