PHP中类的继承关系

PHP中类的继承关系

在PHP中,我时常会写一个类。类写了一个共用方法,然后让子类去继承就能得到对应的功能。假设大致有这么一个父类:

<?php
class Father{

    public function __construct(){
        echo '我是父类的构造方法!';
    }

    protected function say($str = 'Hello World!'){
        echo '说了一句话:' . $str;
    }
}
?>

然后呢,搞一个子类去继承他:

<?

php class chirld extends Father{ public __construct(){ echo '我是子类的构造方法~'; } }

此时你实例化子类,结果将会是我是子类的构造方法~


当然,由于继承关系,所以子类是能够调用父类的say()方法的。

假设你想实现父类的构造方法,然而你又想实现子类的构造方法。你能够这样子去做:

<?php

class chirld extends Father{

    public __construct(){
        parent::__construct();
        echo '我是子类的构造方法~';
    }
}

?>

这时候就会输出我是父类的构造方法!我是子类的构造方法~

假设你在子类中定义了这么一个方法:

    protected function say($str = ''){
        echo '我是子类的say';
    }

那么,你此时从父类继承下来的sys()方法将会被重写。所以调用后输出的结果就是:我是子类的say

假设你这样定义会如何?

    public function say($str = ''){
        echo '我是子类的方法哦~';
    }

这种写法还是能够的。PHP跟其它强类型语言不同的地方是,PHP重写方法同意你对重写的方法”向上公有化”,而不同意你”向下私有化”,就比方在这里你定义为private是肯定会报错的,而像C++这样语言确恰恰相反。

PHP的对于这种情况的思想就是。你父亲给了你受保护级别的遗产。此时在你手上是保护级别的,你父亲同意你对对别人分享,也就是public,但不同意你自己藏起来。也就是private。自己独吞肯定不行的。

此时你肯定会问,那么父类的say()设置为private会如何?
结果不会如何。就是父类已经私有化了,子类根本继承不到。所以你在子类中的say()方法随你这么定都能够。

另一个问题。就是父类已经定义了sys()中带可选參数,那么,在子类中的你像以下这样无參数定义会如何呢?

    public function say(){
        echo '哈哈。

我没有參数了耶~'; }

结果还是能够正常执行的,仅仅只是会有 E_STRICT级的提示。

原因在于PHP标准就是參数的数量必须跟父类对齐,当然,能够在php.ini中进行错误级别设置。

以上假设有什么错误的地方,还请及时纠正。谢谢。

原文地址:https://www.cnblogs.com/wgwyanfs/p/7351542.html