class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
private $sal=5000;
//重写过的方法
public function getSal(){
return $this->sal;
}
public function getParentSal(){
//这里返回的是父类的private属性.
return parent::getSal();
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
echo "
";
echo "parent's \$sal ".$manager->getParentSal();
?>
运行结果
复制代码 代码如下:
PHP 5.3.8
5000
parent's $sal 3000
这个列子中子类重写getSal()方法 所以他调用的是子类的属性
如果你注释子类的这一行
//private $sal=5000;
你会发现一个错误:Notice: Undefined property: Manager::$sal in E:\wamp\www\oo\2-5\2-5-3.php on line 14
如果注释掉12行的子类重写方法 那么echo $manager->getSal();得到的结果是 父类的私有属性$sal 3000
打开zend调试状态看看,内存中的情况。注意最下面,有两个$sal 。分别是 3000 和 5000 。
复制代码 代码如下:
class employee{
private $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
?>
程序运行结果:
复制代码 代码如下:
PHP 5.3.8
3000
将父类的属性$sal 改成 protected ,子类重写了父类的属性。在内存中只有一个 $sal 。
复制代码 代码如下:
class employee{
protected $sal=3000;
public function getSal(){
return $this->sal;
}
}
class Manager extends employee {
protected $sal=5000;
public function getParentSal(){
return $this->sal;
}
}
$manager = new Manager();
echo "PHP ".phpversion()."
";
echo $manager->getSal();
?>
程序运行结果:
复制代码 代码如下:
PHP 5.3.8
5000