类继承PHP [私有vs保护和公共]

时间:2016-06-01 10:11:31

标签: php

示例代码1:

<?php
class People
{
    private function status() {return __METHOD__;}
    public function Sleep(){
        echo $this->status().'<br />';
    }
}
class Programmer extends People
{
    private function status() {return __METHOD__;}
}
$obj = new Programmer();
$obj->Sleep();
?>

印刷 People::status

示例代码2:

<?php
class People
{
    protected function status() {return __METHOD__;}
    public function Sleep(){
        echo $this->status().'<br />';
    }
}
class Programmer extends People
{
    protected function status() {return __METHOD__;}
}
$obj = new Programmer();
$obj->Sleep();
?>

印刷 Programmer::status

所有不同的修饰方法私有和受保护。

为什么在第一种情况下我得到People::status?为什么我没有得到Programmer::status

请解释我,我不明白这一刻。

1 个答案:

答案 0 :(得分:3)

因为在第一种情况下,Sleep方法仍然只存在于对象的People部分内,并且无法访问Programmer::status因为private中的Programmer该对象的一部分,但它有另一种方法,该名称可用且不被覆盖,People::status

在第二种情况下protected允许Programmer::status覆盖People::status

是的,像这样,一个对象中可能存在两个同名的方法,但每个方法只对同一个类定义中的方法可见。