• php面向对象的重写与重载


    重写:

    就是当子类继承父类的一些方法后,子类又在其内部定义了相同的方法,则这个新定义的方法会覆盖继承而来的父类的方法,子类只能调用其内部定义的方法。

    有以下几点要求:

    1.当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。

    必须参数一致,才会实现方法覆盖。当参数个数不一致,则会报错(这就牵扯到上面说所得方法重载)。当方法名字不一致,就不会覆盖,只是子类新定义的方法。

    2.在实行方法覆盖的时候,访问修饰符可以是不一样的,但是子类的访问范围必须大于等于父类的访问范围。

    这是php这些语言设计时的规定吧。我是这么理解的是访问高一层的东西比较容易,如果再去访问底层的东西权限肯定要高一些。

    要求参数和名字一样。并不是要求子类,父类名称相同。

    是要求参数和名字一样,具体就是要求参数的个数与父类相同,而并不是参数名称一致。即传递的参数名字可以为任意,只要保证传递的个数相同即可。

    看代码:

    <?php
    class  shao
    {
        public function sasa($name){
            echo $name,'狗!<br/>';
        }
    }
    class zhen extends shao{
        public function aaa()
        {
            echo '猫<br/>';
        }
    }
    $lli = new zhen();
    $lli->aaa();
    $lli->aaa('binghh');
    ?>

    <?php
    class fu
    {
        public function text(){
            echo '父类';
        }
        public  function  textt(){
            echo '父亲';
    }
    }
    class erzi extends fu{
        public function text()
        {
            parent::text();//我要父类的东西
            echo '儿子';//重写
    
        }
    }
    $shili = new fu();
    $erzi = new erzi();
    $erzi->text();
    ?>

    重载:

    重载是类的多态的一种实现。函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。即当调用的时候,虽然方法名字相同,但根据参数的不同可以自动调用相应的函数。

    php不好实现。

    可以使类里面的某个方法产生多种效果,根据传入参数不同,可以执行不同的逻辑。

    有以下几点要求:

      1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
       2、不能通过访问权限、返回类型、抛出的异常进行重载;
       3、方法的异常类型和数目不会对重载造成影响;

    有点复杂 代码不准...

    <?php
    class fu
    {
        public function text(){
            echo '父类';
        }
        public  function  textt(){
            echo '父亲';
        }
    }
    class erzi extends fu
    {
    
            function test($name)
            {
                //方法重载
                parent::text();//我要父类的东西
                echo "erzi",$name;//重写
    
            }
        }
    
    $erzi = new fu();
    $erzi-> text("123");
    ?>

    重写只存在于子类与父类中,重载存在于一个类中。

    override是重写

    overload是重载

  • 相关阅读:
    0 到 1 掌握:Vue 核心之数据双向绑定
    前端性能优化, 从哪些方面入手? (缩略版)
    MDN中定义的Function.prototype.call()和apply()与bind()
    应聘前端开发的一次笔试题目(某数据挖掘分析公司)
    应聘前端开发的一次笔试题目(某电信子公司)
    应聘前端开发的一次笔试题目(某外资公司)
    算法之杨辉三角形(Java语言)
    算法之求质数(Java语言)
    微信小程序背景
    备份恢复(一)
  • 原文地址:https://www.cnblogs.com/xuan584521/p/6395217.html
Copyright © 2020-2023  润新知