• 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中进行错误级别设置。

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

  • 相关阅读:
    Linux
    python 鸢尾花数据集报表展示
    python 词云
    毕业设计回顾
    editor.md
    杂记
    垃圾回收器
    杂记
    随笔
    杂记
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7351542.html
Copyright © 2020-2023  润新知