继承与方法重写 - PHP面向对象编程(OOP)

类中常用操作,很重要

PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:

Child继承Parent的类

class Child extends Parent {
   // 代码部分
}

实例

实例中 Child_Site 类继承了 Site 类,并扩展了功能:

<?php 
// 子类扩展站点类别
class Child_Site extends Site {
   var $category;

    function setCate($par){
        $this->category = $par;
    }
  
    function getCate(){
        echo $this->category . PHP_EOL;
    }
}

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

重写前site类中的方法

 function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }

实例中重写了Child_Site类中, getUrl getTitle 方法:

function getUrl() {
   echo $this->url . PHP_EOL;
   return $this->url;
}
   
function getTitle(){
   echo $this->title . PHP_EOL;
   return $this->title;
}

子类继承父类的属性和方法

子类继承父类的属性和方法,也就是说子类拥有父类所有的东西,包括 public(公有)、protected(保护)和private(私有)的。

但是父类私有的属性和方法不能让子类直接调用,并不是说没有继承过来,而是继承过来了,但是要调用父类的私有属性和方法的话还是需要通过父类的 public、protected 方法调用。

<?php

class father {

    public function __construct(){
        echo "父类构造函数,如果子类没有重写构造函数将会调用这里。如果子类重写了构造函数则子类不用自动调用这个函数,而需要显示调用父类构造函数。";
    }

    public $m_fa="fa";    //公有
    protected $m_fb="fb";//受保护
    private $m_fc="fc";  //私有

    public function getFa(){ echo $m_fa;}
    protected function getFb(){return $m_fb;}
    private function getFc(){return $m_fc;}
    public function getFaPrivate_1(){return $m_fc;}
    public function getFaPrivate_2(){return $m_fc;}

    public function getAll(){
        echo $this->m_fa, $this->m_fb, $this->m_fc;//此行代码打印fafbfc
        echo  $this->getFa(), $this->getFb(), $this->getFc();
    }

}

class son extends father{
    public function __construct(){
        parent::__construct(); //显示调用父类构造函数。
        echo "子类构造函数调用";
    }
}

$class_fa = 'father';
$class_son = 'son';
$fa = new $class_fa();//父类 - father类的实例化
$fa->getAll();
$son = new $class_son();//子类 - son类的实例化
$son->getFa();
// 执行以下方法会报错,protected 无法在类外面进行调用的
// 报错信息:Fatal error: Uncaught Error: Call to protected method father::getFb()...
// $son->getFb();
// 执行以下方法会报错,private 无法被继承,也无法在类外面进行调用的
// 报错信息:Fatal error: Uncaught Error: Call to private method father::getFc()...
// $son->getFc();

$son->getFaPrivate_2();//私有类成员只能被其定义所在类中访问
?>

子类继承父类构造方法

继承与方法重写 - PHP面向对象编程(OOP)-Npcink
继承与方法重写 - PHP面向对象编程(OOP)-Npcink

调用父类构造方法 - PHP面向对象编程(OOP)

子类继承带有参数的父类的构造方法:

class students{
    var $name,$age,$sex;
    function __construct($name,$age,$sex){
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;
    }
}

class master extends students{
    var $hobby,$address;
    function __construct($name, $age, $sex,$hobby,$address){
        parent::__construct($name, $age, $sex);
        $this->hobby = $hobby;
        $this->address = $address;
    }
}

参考文章

php

构造函数与析构函数 - PHP面向对象编程(OOP)

2022-8-24 14:19:54

php

访问控制 - PHP面向对象编程(OOP)

2022-8-24 15:19:53

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 1355471563#qq.com 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索