找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2406|回复: 1

[教程] PHP面向对象中类的继承的使用

[复制链接]
发表于 2013-4-15 09:23:26 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
  1. PHP类的继承在PHP语言的学习中是一个比较重要的知识点。那么我们该如何正确的学习PHP类的继承呢?在PHP面向对象编程里,类的继承永远是最关键的。
  2. 这就像人类生儿育女一样(为什么一定要生儿育女呢,难道就是为了防老!不得而知呀),你把自己的一些基因和你老婆的基因各拿出来一些,再生成一个新的个体,这个新的个性一定会包含你们两个人身上的特征,这就是生物上关于遗传(继承)的一个解说。在编程的世界是这个遗传就是继承!
  3. 首先在了解了继承的一些活生生的原理后,我想再来看PHP类的继承是不是不再那么神秘。或许它本来就不神秘,是因为我们自己太复杂了吧。要有继承就得有一个"根源",这"根源"你可能想像你以后生了儿子或者女儿,他们会从你这里得到一些"东西(属性和方法)",这样你的"后代"就是持有你的(根源)所有一些特征了。下面通过语法来描述一下这个在PHP的面向对象中是怎么表达吧(不可能像人类那么直接啦,结婚,过段时间你的后代就产生了)
  4. 1.产生"根源"类(父类或者基类)
  5. 语法:class father{
  6. }
  7. 1.产生"后代"(子类)
  8. 语法:class son extends father{
  9. }
  10. 说明:父类只是一个平常的类,要想有后代你只需要在平常类后加一个extends关键字就OK了,这样你的子类只拥有了父类所有的属性和方法了。其实就是这么简单罢了。
  11. 下面让我们做点实际点事情吧,毕竟PHP类的继承中定义一个父类和子类是要完成某个任务的吧!在这里这个任务比较单调,就拿人来说,人有名字(属性),人要睡觉还要吃饭(方法)。我们就用这个基本的任务要完成本节的知识吧。
  12. <?php   
  13. class father{   
  14. protected $name;   
  15. function __construct($name){   
  16. $this->name=$name;   
  17. }   
  18. function __destruct(){   
  19. echo '<p>{$this->name}也是要死的
  20. </p>';   
  21. }   
  22. //这个就是所谓的构造函数,用来初始化   
  23. function go_to_sleeping(){   
  24. echo '<p>{$this->name}想睡觉.</p>';   
  25. }   
  26. function eat(){   
  27. echo '<p>{$this->name}想吃饭.</p>';   
  28. }   
  29. }   
  30. class son extends father{   
  31. function playing(){   
  32. //小孩子会很调皮的,当然他也是要吃要睡的生物   
  33. echo '<p>{$this->name}正在捣蛋...</p>';   
  34. }   
  35. }   
  36. $your_father=new father('老爸');   
  37. $your_father->go_to_sleeping();   
  38. $your_father->eat();   
  39. $my_son=new son('宝贝');   
  40. $my_son->go_to_sleeping();   
  41. $my_son->eat();   
  42. $my_son->playing();   
  43. ?>   
  44. <?php  
  45. class father{  
  46. protected $name;  
  47. function __construct($name){  
  48. $this->name=$name;  
  49. }  
  50. function __destruct(){  
  51. echo '<p>{$this->name}也是要死的
  52. </p>';  
  53. }  
  54. //这个就是所谓的构造函数,用来初始化  
  55. function go_to_sleeping(){  
  56. echo '<p>{$this->name}想睡觉.</p>';  
  57. }  
  58. function eat(){  
  59. echo '<p>{$this->name}想吃饭.</p>';  
  60. }  
  61. }  
  62. class son extends father{  
  63. function playing(){  
  64. //小孩子会很调皮的,当然他也是要吃要睡的生物  
  65. echo '<p>{$this->name}正在捣蛋...</p>';  
  66. }  
  67. }  
  68. $your_father=new father('老爸');  
  69. $your_father->go_to_sleeping();  
  70. $your_father->eat();  
  71. $my_son=new son('宝贝');  
  72. $my_son->go_to_sleeping();  
  73. $my_son->eat();  
  74. $my_son->playing();  
  75. ?>
  76. 解析:在我们的第一个使用继承的范例里使用了PHP的构造函数中所提到的构造函数和PHP类的封装中的关键字,如果有什么不明白的就去看看吧!我可不想再多说了,中午没想睡觉呀.说说这段小程序吧。
  77. 在类的father里,我们定义了一般的特征,比如人的名字,人要吃饭和睡觉,然后在它的子类(后代)我们定义一个个性化的方法 (playing),毕竟人与人之间是有不同的地方吧。我们使用构造函数来初始化这个人名,当然也使用了析构函数来"消灭"掉对象,但你可能没有发现在子类里内是没有构造函数和析构函数的,所以子类是继承了父的所有方法,要不然你怎么能$my_son->go_to_sleeping();这样调用呢,这就是PHP类的继承了。
  78. 文章引用自:http://club.topsage.com/thread-501298-1-1.html
  79. <?php
  80. class my_class{
  81. var $username='小鸡';
  82. var $num=10;
  83. function yingxiaoji(){
  84.     //使用类里的全局变量
  85. $num=$this->num;
  86. $username=$this->username;
  87. echo '我养了'.$num.'条'.$username;
  88. }
  89. function jiegou(){
  90.     //使用类中的函数时,用this直接引用
  91.     $this->yingxiaoji();
  92.     echo '全都卖了';
  93. }
  94. }
  95. //php类的承 extends表示继承,但是php不允许同时继承多个基类
  96. class my_class_extend extends my_class{
  97. var $color='红色';
  98. function mycolor(){
  99.     $color=$this->color;
  100.     $username=$this->username;
  101.     echo ',这只'.$username.'是'.$color;
  102. }
  103. }
  104. $myname=new my_class(); //类的实例化
  105. $myname->yingxiaoji();
  106. echo '
  107. ';
  108. //针对类中的变量重新赋值
  109. $myname->username='小**';
  110. $myname->num='20';
  111. $myname->yingxiaoji();
  112. echo '
  113. ';
  114. $myname->jiegou();
  115. echo '
  116. ';
  117. //初始化一个类的继承类
  118. $myname_extend=new my_class_extend();
  119. $myname_extend->jiegou();
  120. $myname_extend->mycolor();
  121. echo '
  122. ';
  123. //由于是继承类,那么它的基类的属性全都有了,就可以直接给基类的变量传值
  124. $myname_extend->username='小**';
  125. $myname_extend->num=100;
  126. $myname_extend->color='黑色';
  127. $myname_extend->jiegou();
  128. $myname_extend->mycolor();
  129. ?>
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2013-4-15 11:48:24 | 显示全部楼层 来自 中国–北京–北京
oh my god 我有晕了

评分

参与人数 1金币 +5 收起 理由
抢楼评分专号 + 5 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 13:40 , Processed in 0.055102 second(s), 14 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表