class employee{
protected $sal=3000;
public function getSal(){
$this->sal = $this->sal + 1200;
$salary = $this->sal;
return $salary;
}
}
class Manager extends employee {
// protected $sal=3001;
public function getSal(){
$salary = parent::getSal();// 这里调用了父类的方法.
echo $salary;echo "<br>";
echo $this->sal;
$this->sal = $this->sal + 1500;
return $this->sal ;
}
}
$emp = new employee();
echo "普通员工的工资是 " . $emp->getSal();
echo "<br>";
$manager = new Manager();
var_dump($manager);
echo "经理的工资是: " . $manager->getSal();
var_dump($manager);
实例化employee结果:
普通员工的工资是 4200
实例化manager
打印manager对象:
object(Manager)[2]
protected 'sal' => int 3000
调用manager getSal()方法:
4200//返回值
4200经理的工资是: 5700//调用对象的属性,进行开工资,对象的属性此时就是父类的属性(子类没有对父类属性进行重写),此时因为调用父类的getSal()方法sal变为4200,调用时就是父类的属性值,再加上1500,就变为5700.
打印manager对象:
object(Manager)[2]
protected 'sal' => int 5700
如果子类对父类属性进行重写
class employee{
protected $sal=3000;
public function getSal(){
$this->sal = $this->sal + 1200;
$salary = $this->sal;
return $salary;
}
}
class Manager extends employee {
protected $sal=3001;
public function getSal(){
$salary = parent::getSal();// 这里调用了父类的方法.
echo $salary;echo "<br>";
echo $this->sal;
$this->sal = $this->sal + 1500;
return $this->sal ;
}
}
$emp = new employee();
echo "普通员工的工资是 " . $emp->getSal();
echo "<br>";
$manager = new Manager();
var_dump($manager);
echo "经理的工资是: " . $manager->getSal();
var_dump($manager);
别的没有变化就是对属性进行了重写:
实例化employee结果:
普通员工的工资是 4200
实例化manager:
打印manager对象:
object(Manager)[2]
protected 'sal' => int 3001
调用manager getSal()方法:
4201//属性,属性离不开对象,提属性必须说是哪个对象的属性!!!,此对象的属性为3001所以加1200为4201
//所以当调用父类的方法时,用的是重写时的属性值,($this->sal调用的值为对象的属性值),
4201经理的工资是: 5701
打印manager对象:
object(Manager)[2]
protected 'sal' => int 5701