zoukankan      html  css  js  c++  java
  • php类和对象(二)

    面向对象第三大特性:多态

    概念: 当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用取调用相应方法时表现出的不同

    条件: 1.必须有继承

    2.子类必须对父类的方法进行重写

    多态在弱类型语言中表现不明显,在强类型语言中表现比较明显,在php中不用考虑.

    class Ren
    {
      public $name;
      public $sex;
      function say()
      {
        echo "hello";
      }
    }
    class China extends Ren
    {
      function say()
      {
        echo "你好";
      }
    }
    $r =new Ren();
    $r1 =new China();

    多态在强类型语言中可用父类引用指向子类的实例,php不用规定变量的类型,多态不明显.

    函数重载:

    1.方法名必须一样

    2.函数里面参数个数不同

    3.如果参数个数相同,类型不同

    函数重载只在强类型语言中有,弱类型语言中没有

    php是弱类型语言,php有可变参数的函数,且不用规定参数类型,不满足函数重载的条件.

    function say()
    {
      echo "hello";
    }
    function say($a)
    {
      echo $a."hello";
    }
    function say($a,$b)
    {
      echo $a.$b."hello";
    }

    三个say()方法,随参数个数不同,调用的函数也不同.

    __tostring()方法:   输出类的一些描述

    function __tostring()
    {
      return "这个对象包含变量name和sex,一个say方法";
    }
    $r= new Ren();
    echo $r;    //输出return值

    对象的克隆:

    $r=new Ren();
    
    $r->name="张三";
    
    $r1 =clone $r;    //克隆对象
    
    var_dump($r1);
    
    //在克隆时,想要对克隆的新对象中添加一些特殊的东西,需要在Ren类中加入__clone方法
    
    function __clone()
    
    {
    
      $this->name="李四";     //$this是复本(克隆之后的新对象)
    
    }
    
    echo $r->name;
    
    echo $r1->name;
    
    //输出:张三李四
    
     
  • 相关阅读:
    LeetCode——二叉树中的最大路径和
    LeetCode——验证回文串
    LeetCode——word-ladder*
    LeetCode——最长连续序列
    3G? 2G? 2.5G? 4G? 与 WIFI, GPRS,CDMA 3G无线上网
    GSM、GPRS、EDGE、2G、3G与WAP的关系
    3G 2G GPRS 1G的概念
    那些精华博客
    单片机系统与标准PC键盘的接口模块设计
    以多个实例方式打开Notepad++
  • 原文地址:https://www.cnblogs.com/xinghun/p/5444896.html
Copyright © 2011-2022 走看看