示例代码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
。
请解释我,我不明白这一刻。
答案 0 :(得分:3)
因为在第一种情况下,Sleep
方法仍然只存在于对象的People
部分内,并且无法访问Programmer::status
因为private
中的Programmer
该对象的一部分,但它有另一种方法,该名称可用且不被覆盖,People::status
。
在第二种情况下protected
允许Programmer::status
覆盖People::status
是的,像这样,一个对象中可能存在两个同名的方法,但每个方法只对同一个类定义中的方法可见。