当前位置:首页 > PHP教程 > php面向对象 > 列表

PHP中面向对象之继承

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-15 08:34:50 浏览: 评论:0 

本文目标:

1、了解继承的定义

2、掌握继承的好处

(一)、定义

PHP中面向对象之继承

我们仔细看上面一张图,然后做一件事情,找出他们的共同点

共同点:

1、都拥有部分相同的属性和方法

2、他们都是人

按照正常类的定义走,我们要实现以上2个类,我们得分别定义NBA球员这个类的所有属性和方法,然后定义女主播类的时候,还得写一遍重复的姓名,身高,体重等属性和吃饭的方法,如果又有一个类比如叫学生,那意味着这些共同的属性和共同的方法又得重复写一遍,以此类推,代码会有很多地方类似,这样增加的代码的冗余性,所以为了解决这种冗余性,为了让代码更简洁,可重用性高,我们可以把这些共同的属性和方法都写到一块去,然后让每个类都去调用这个公共的属性和方法,这样维护起来是不是就更加方便了,而且代码也更加简洁了,那么这种做法我们就叫做继承

具体怎么做的呢,如下图

PHP中面向对象之继承

我们先创建了一个“人“的类,让这个人都具有2个类都有的属性和方法,再让NBA球员和女主播都继承 “人” 这个类

PHP中面向对象之继承

概念:被继承的类叫父类,比如人,继承的类叫子类

总结:什么是继承,继承是一种方法,用来提高代码的可重用性和减少代码的冗余性,就像现实生活中的遗传一样,子女都会继承父母的部分基因,所以你一生下来你就是有人类的共同属性和行为

(二)、继承的好处

1、提高代码的重用性,节约了编程的时间和代价

父类中定义的属性和方法就不需要子类中重复定义,子类只要继承了父类,就拥有了父类中所有的属性和方法

2、对于同一个父类下的所有子类,调用他们的时候可以一视同仁

比如不管是NBA球员还是女主播,因为他们都是人,所以我们调用他们的时候可以直接调用父类的方法,比如吃饭,而不用管这个类到底是NBA球员还是女主播

3、子类可以修改调整父类定义的类成员

a、我们称为重写(Overwrite)

b、一旦子类修改好了,就按照子类定义的方法执行

这相当于变异

学习任何东西我们既要知道其理论,还要有相关的理论实践,其实所有的理论都是实践得出来的,所以有的时候我一再强调,理论虽然很抽象,但是大家有了一定的实践经验后也要进行总结,总结一些言简意赅,通俗易懂的“理论”,这个习惯培养好了以后,我相信很多知识大家能够了解的更加透彻,同时更容易抓住事情的本质,这样分析问题的能力也会得到提升。

好了,既然要理论和实践相结合,那么接下来,我们通过代码进行实操演示,看看在代码中具体是怎么实现继承的

(三)、具体代码:

  1. <?php 
  2.  
  3. /*** 
  4.  
  5.  * 案例目标 
  6.  
  7.  * 1.掌握继承的定义 
  8.  
  9.    2.掌握继承的好处 
  10.  
  11.  */ 
  12.  
  13.  //定义一个“人”类 
  14.  
  15. class Human{ 
  16.  
  17.     public $name = "";//姓名 
  18.  
  19.     public $height = "";//身高 
  20.  
  21.     public $weight = "";//体重 
  22.  
  23.  
  24.  
  25.     public function eat($food){ 
  26.  
  27.         echo $this->name."在吃".$food."<br/>"
  28.  
  29.     } 
  30.  
  31.  
  32. //女主播 
  33.  
  34. class Anchors extends Human{ 
  35.  
  36.     public $name = ""
  37.  
  38.     public $stageName = ""
  39.  
  40.     public function __construct( $name,$stageName ){ 
  41.  
  42.         $this->name = $name
  43.  
  44.         $this->stageName = $stageName
  45.  
  46.     } 
  47.  
  48.     public function singing(){ 
  49.  
  50.         echo "我是女主播,我会唱歌<br/>"
  51.  
  52.     } 
  53.  
  54.     //重写方法eat 
  55.  
  56.     public function  eat($food){ 
  57.  
  58.         echo "我是女主播,我是边唱歌边吃{$food}<br/>"
  59.  
  60.     } 
  61.  
  62.  
  63. //Nba球员类 
  64.  
  65.  class NbaPlayer extends Human{ 
  66.  
  67.    //因为父类已经有了,所以就不需要再写了,通过extends来实现 
  68.  
  69.     // public $name  = "";//姓名 
  70.  
  71.     // public $height = "";//身高 
  72.  
  73.     // public $weight = "";//体重 
  74.  
  75.  
  76.  
  77.     public $team = "";//团队 
  78.  
  79.     public $playerName = "";//球员号码 
  80.  
  81.  
  82.  
  83.     public function __construct( $name,$height,$weight,$team,$playerName ){ 
  84.  
  85.         $this->name = $name
  86.  
  87.         $this->height=$height
  88.  
  89.         $this->weight = $weight
  90.  
  91.         $this->team = $team
  92.  
  93.         $this->playName = $playerName
  94.  
  95.         echo "构造函数执行了,当前对象是{$this->name}<br/>"
  96.  
  97.     } 
  98.  
  99.       
  100.  
  101.      
  102.  
  103.    //跑步 
  104.  
  105.     public function run(){ 
  106.  
  107.         echo "跑步中<br/>"
  108.  
  109.     } 
  110.  
  111.     //跳跃 
  112.  
  113.     public function jump(){ 
  114.  
  115.         echo "跳跃<br/>"
  116.  
  117.     } 
  118.  
  119.     //运球 
  120.  
  121.     public function dribble(){ 
  122.  
  123.         echo "运球<br/>"
  124.  
  125.     }  
  126.  
  127.     //传球 
  128.  
  129.     public function pass(){ 
  130.  
  131.         echo "传球<br/>"
  132.  
  133.     } 
  134.  
  135.     //投篮 
  136.  
  137.     public function shoot(){ 
  138.  
  139.         echo "投篮<br/>"
  140.  
  141.     } 
  142.  
  143.     //扣篮 
  144.  
  145.     public function dunk(){ 
  146.  
  147.         echo "扣篮<br/>"
  148.  
  149.     } 
  150.  
  151.     //重写方法eat ,只要名称和父类一样就是代表重写了不一定参数也要保持一样 
  152.  
  153.     public function eat($food){ 
  154.  
  155.         echo "我是Nba球员,我是站着吃饭,边吃{$food}边看球赛<br/>"
  156.  
  157.     } 
  158.  
  159.  } 
  160.  
  161.  //测试,NBA球员,没有直接定义name,身高,体重,现在输出一下看结果有没有 
  162.  
  163.  //创建乔丹对象 
  164.  
  165.  $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23"); 
  166.  
  167.  //输出乔丹对象 
  168.  
  169.  echo "名称= ".$jordon->name."<br/>"
  170.  
  171.  
  172.  
  173.  //测试,NBA球员,没有直接定义eat方法,现在输出一下看结果有没有 
  174.  
  175.  echo $jordon->eat("苹果"); 
  176.  
  177.  //证明第二个好处,只要是个人就可以调用它的eat方法 
  178.  
  179.  $linda = new Anchors("琳达","LD"); 
  180.  
  181.  echo $linda->eat("苹果"); 
  182.  
  183.  //测试第三个好处是否真实 
  184.  
  185.  //思路1.为女主播和NBA球员2个类分别重写eat方法 
  186.  
  187. //    2.再次执行2个对象的eat方法 
  188.  
  189. //  会发现一旦子类重写了父类的方法,那么就会调用子类自己的方法了,这里就大家自己写下,因为上面我已经调用了eat方法,一旦重写了,上面的结果会变 
  190.  
  191.  
  192.  
  193. ?> 

通过上述代码的演示,我们总结一下:

1、extends 就是继承,通过这个关键字可以实现子类继承父类,共享父类的所有属性和方法

2、继承代码的其他特点:

● 在子类构造函数中也可以直接通过$this->来访问

● 在php中extends 后面只能继承一个类,不能用,来实现继承多个类,否则会报错

总结:本文其实目标只有2个,知道继承的定义和好处,最后我们通过代码相信对继承的好处有了更深的体会和理解

Tags: PHP面向对象 PHP继承

分享到: