• 方法重载(重写)/方法覆盖、魔术函数实现



    方法重载
    函数名不一样通过函数的参数个数或者参数类型不同,达到调用同一个函数名,但是可以区分不同的函数
    class A{
    public function test1(){
    echo "test1";}
    public function test1($a){
    echo "test1 hhh";}
    }


    重载
    $a=newA();
    $a->test1();
    $a->test1(222);

    上面的这种用法是不对的

    魔术函数 方法重载实现

    class A{
    public function test1($p){
    echo "接受一个参数";}
    public function test1($p){
    echo "接受二个参数";}
    }
    提供一个__call
    __call是它一个对象调用某个方法,而该方法不存在,则系统会自动调用__call
    function __call($method,$p){

    var_dump($p);
    if($method=="test1"){
    if(count($p)==1){
    $this->test1($p);
    }else if(count($p)==2){
    $this->test2($p);
    }
    }
    }

    $a=newA();
    $a->test(1);
    $a->test(1,2);


    魔术函数
    __set,__get,__construct,__destruct,__call,__isset,__unset

    __LINE__输出多少行
    ,__FILE__输出文件名
    ,__DIR__,
    __CLASS__输出类名


    方法重写/方法覆盖(overload)

    <?php
    class Animal{
    public $name;
    protected $price;
    function cry(){
    echo "不知道";}

    }
    class Dog extends Animal{
    //覆盖
    function cry(){
    echo "小狗";}
    }
    class Pig extends Animal{
    //覆盖
    function cry(){
    echo "小猪";}
    }

    $dog1=new Dog();
    $dog1->cry();
    $pig=1new Pig();
    $pig1->cry();
    ?>

    关于重写:
    当一个父类知道所有的子类都有一个方法但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法
    1.要实现重写,要求子类的那个方法的名字和参数列表一模一样,但是并不要求参数名称一样
    2.如果子类要求调用父类的某个方法(public/protected)则可以使用parent::方法名(参数...),父类名::方法名(参数...)
    3.在实现方法覆盖的时候,访问修饰符可不一样,但是必须满足子类的访问范围>=父类的访问范围


    多态体现在什么地方
    当子类没用覆盖父类的方法则$call->cry()调用的是父类,子类覆盖父类的方法则调用自己的cry( )

  • 相关阅读:
    Oracle EBS 更改物料说明后,在MTL_SYSTEM_ITEMS_B表中无变化
    Oracle EBS 复制用户职责
    Oracle EBS 多节点停应用
    Oracle EBS AR 更新客户
    Oracle EBS AP更新供应商地址
    Oracle EBS AP 供应商地点失效
    Oracle AP更新供应商
    string 从下标0 一直截到倒数第三位
    一个不错的spring 学习博客
    Filter及FilterChain的使用详解
  • 原文地址:https://www.cnblogs.com/xujing6/p/5990565.html
Copyright © 2020-2023  润新知