PHP 面向对象基础:重载父类方法
什么是重载父类方法?
子类可以定义一个和父类相同名字的方法,从而覆盖掉原来父类的方法,也可以在方法中添加的新的功能,从而实现重载父类的方法。
为什么需要重载父类方法?
子类重载父类方法可以节省代码量,因为没有必要再去写一遍父类的方法。由于父类名称可能改变,所以子类覆盖父类中的方法时可以采用关键字 parent 来代替父类名称使用,便于后期编程的修改。子类也可以完全重写父类的方法,实现自己的特定功能。
class Parents
{
    public $name;
    protected $age;
    private $addr;
    public function __construct($name, $age, $addr)
    {
        $this->name = $name;
        $this->age = $age;
        $this->addr = $addr;
    }
    public function getName()
    {
        echo 'This is ' . $this->name . '.<br />';
    }
    protected function getAge()
    {
        echo 'Parents\' age is ' . $this->age . '.<br />';
    }
    private function getAddr()
    {
        echo 'Parents\' address is ' . $this->addr . '<br />';
    }
}
子类定义同名函数,使用关键字 parent 实现重载父类方法
class Son extends Parents
{
    public function getName()
    {
        parent::getName();
    }
    protected function getAge()
    {
        echo 'Son\'s age is ' . $this->age . '.<br />';
    }
}
子类对象成功调用重载后的方法
$son = new Son('Bob', 25, 'Beijing, China');
// This is Bob.
$son->getName();
也可以完全重写父类方法
public function getName()
    {
        echo 'Son\' name is ' . $this->name. '.<br />';
    }
此时对象调用重载后的方法输出
Son' name is Bob.
注意
如果父类方法修饰符是 public ,子类重载父类方法修饰符也只能是 public ;如果父类方法修饰符是 protected ,子类重载父类方法修饰符只能是 public 或者 protected;如果父类方法修饰符是 private ,子类无法实现重载父类方法。
          
 PHP 社区 Wiki
    
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: