日期:2014-05-16  浏览次数:20407 次

子类重写父类属性的问题。。。。求解惑

<?php
/**
 *  子类重写父类方法和属性
 **/
class Employer
{
protected $sal=3000;
public function getSal()
{
return $this->sal;
}

}

class Manager extends Employer
{
protected $sal=5000;
public function getParentSal()
{
return parent::getSal(); //调用父类方法 返回父类属性,为什么会是5000
}
public function getSal()
{
return $this->sal;
}
}
$manager = new Manager;
echo $manager->getParentSal().PHP_EOL;//5000 这是为什么也是5000呢,但是在5.3以下版本好像是3000,求解释????
echo $manager->getSal();//5000
?>
php 子类重写父类属性的问题

------解决方案--------------------
为什么不呢?

5.2.10
5000 5000

5.4.20
5000 5000
------解决方案--------------------
protected 只不过是保护模式,自然还是会被子类覆盖的
------解决方案--------------------
把protected 换成 private,换成私有的就不能被重新赋值。