我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

在父类中加载构造函数

::($name,$sex,$age); 无需重新分配

加载父类中的方法:

::说();

详细用法:

function say() {
    parent::say(); //调用父类中被本方法覆盖掉的方法
    echo "在".$this->school."学校上学
"
; //再原有的功能基础上多加一点功能 }

例子:


class Person { //声明一个人类,定义人所具有的一些其本的属性和功能成员,做为父类
    protected $name; //声明一个存储人的名子的成员
    protected $sex; //声明一个存储人的性别的成员
    protected $age; //声明一个存储人的年龄的成员
    function __construct($name="", $sex="男", $age=1) { //构造方法用来创建对象并初使化成员属性
        $this->name = $name; //为成员属性name在创建对象时赋初值
        $this->sex = $sex; //为成员属性sex在创建对象时赋初值
        $this->age = $age; //为成员属性age在创建对象时赋初值
    }
    protected function say(){ //在人类在声明一个通用的说话方法,介绍一下自己
        echo "我的名字叫:".$this->name.", 性别:".$this->sex.", 我的年龄是:".$this->age."。
"
; } } class Student extends Person { //声明一个学生类,使用extends关键字扩展(继承)Person类 private $school; //在学生类中声明一个所在学校school的成员属性 //覆盖父类中的构造方法,在参数列表中多添加一个学校属性,用来创建对象并初使化成员属性 function __construct($name="", $sex="男", $age=1, $school="") { //调用父类中被本方法覆盖的构造方法,为从父类中继承过来的属性赋初值 parent::__construct($name,$sex,$age); $this->school=$school; //新添一条为子类中新声明的成员属性赋初值 } function study() { //在学生类中声明一个学生可以学习的方法 echo $this->name."正在".$this->school."学习
"
; } //定义一个和父类中同名的方法,将父类中的说话方法覆盖并重写,多说出所在的学校名称 function say() { parent::say(); //调用父类中被本方法覆盖掉的方法 echo "在".$this->school."学校上学
"
; //再原有的功能基础上多加一点功能 } } $student=new Student("张三","男",20, "edu"); //创建一个学生对象,并多传一个学校名称参数 $student->say(); //调用学生类中覆盖父类的说话方法 ?>

当子类中没有定义构造函数时,会自动调用父类的构造函数。因此,实例化子类时,必须采用父类构造函数的形式。

如果子类定义了自己的构造函数,则不会自动调用父类的构造函数,但可以手动调用:::();

当子类中没有定义析构方法时,会自动调用父类的析构方法。

如果子类定义了自己的析构函数,则不会自动调用父类的析构函数,但可以手动调用:::()

PHP 中的继承

继承:子类继承父类的所有属性和非私有方法。常量也可以被继承。

属性的继承:子类继承了父类的所有属性(和),但是私有属性在子类中不能被访问;

常量的继承:子类可以从父类继承常量;

方法的继承:子类继承了父类的非私有方法,但是私有属性在子类中不能被访问;

覆盖范围说明:

只有受保护或公共的属性或方法才可以被重写,或者换句话说,只有受保护或公共的属性或方法才可以被“继承”。

私有属性或方法有两种情况:

私有属性和方法可以被继承但不能被访问(为了可以访问,必须在父类中定义公共方法才能访问私有属性和方法);

从访问控制角度来说, 在其继承的类中是不能被访问的(只能在自己的类中访问);

示例 1:


header("Content-type: text/html; charset=utf-8");
class father{
    public $name = "父亲";
    protected $age = "50";
    private $monkey = "5000";
    public function getson(){
        echo $this->name."
"
; echo $this->age."
"
; echo $this->monkey."
"
; } } class son extends father{ public $name = "儿子"; protected $age = "20"; private $monkey = "4000"; } $son = new son(); echo "
";
var_dump($son);
echo "

";/*(son)#1 (4) {["name"]=>(6) "Son"["age":]=>(2) "20"["":"son":]=>(4) "4000"["":"":]=>(4) "5000"}*/$son->(); //从父类继承的方法/*Son*/$ = new ();$->(); //父类中的方法/**/?>

示例 2:


//定义一个学校的多种人员角色
class Member{
    public $name = "";
    public $age ;
    protected $age2 = 2; //跟age对比
    private $age3 = 3; //跟age对比
function __construct($n, $a){
    $this->name = $n;
    $this->age = $a;
}
public function showInfo(){ //在父类中定义公有的方法
    echo "
我叫{$this->name},"
; echo "今年{$this->age}岁"; echo "
age2:"
. $this->age2; echo "
age3:"
. $this->age3; } } class Student extends Member{ public $major = "PHP"; //专业 function __construct($n, $a, $m){ parent::__construct($n, $a); $this->major = $m; } public function showInfo(){ //这里是子类的showInfo parent::showInfo(); //这里使用了父类的showInfo()方法 echo "
我的专业为:"
. $this->major; echo "
子类中访问age:"
. $this->age; echo "
子类中访问age2:"
. $this->age2; echo "
子类中访问age3:"
. $this->age3; //报错, 父类中的私有属性是不能使用 } } $s1 = new Student("小明", 22, 'java'); $s1->showInfo(); ?>

继承链

可以通过链式继承

一旦在文件中声明了类,就不能再次声明它,类似于不允许在类中出现同名的函数。


//PHP中的继承链条
class A{
    public $name1 = "A";
}
class B extends A{
    public $name = "B";
}
class C extends B{
}
$c = new C();
var_dump($c);
?>

(C)#1 (2) { ["名称"]=> (1) "B" ["名称1"]=> (1) "A" }

二维码
扫一扫在手机端查看

    Tags : PHP
本文链接:https://by928.com/3980.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线