PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解


Posted in PHP onJune 14, 2019

本文实例讲述了PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作。分享给大家供大家参考,具体如下:

在PHP中,会遇到这样的情况,子类继承父类,但是又需要对父类的属性和方法进行一定的扩展,这时子类可以对属性和方法进行重写,覆盖与父类同名的属性和方法,但是如果父类的方法中的内容比较多,比如上百成千行代码,这时只需使用”父类类名::方法” 或“parent::方法“来调用父类中被覆盖的方法,有就是重新载入父类,然后再加上需要扩展的语句。

方法的重写

<?php
 class Person{
  public $name;
  public function __construct($name="" ){
    $this->name=$name;
  }
  public function say(){
    echo "我叫".$this->name ;
  }
}
?>
<?php
  class Student extends Person{
   public $name;
   public function __construct($name=""){
    $this->name =$name;
   }
//这里定义了一个和父类中同名的方法,将父类中的说话方法覆盖并重写
 public function say(){
    echo "我叫".$this->name .",今年25岁了" ;
 }
}
?>

重写方法与访问权限

在子类覆盖父类的方法时要注意,在子类中重写的方法的访问权限一定不能低于父类被覆盖的方法的访问权限。例如父类中的方法的访问权限是protected,那么在子类中重写的方法的权限就要是protectedpublic。如果父类的方法是public权限,子类中要重写的方法只能是public。总之在子类中重写父类的方法时,一定要高于父类被覆盖的方法的权限。

重写时的参数数量

子类可以拥有与父类不同的参数数量,如下面的构造方法中,多添加了一个参数$age。

<?php
class Student extends Person{
 public $name;
 public $age;
 public function __construct($name="",$age=25){
   $this->name =$name;
   $this->age =$age;
 }
 public function say(){
   echo "我叫".$this->name .",今年".$this->age."岁了" ;
 }
}
?>

上面的例子,通过覆盖我们就实现了对“方法”扩展。
但是,像这样做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“Person”类里面的“say()”方法有里面有100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:

一种是使用父类的 “类名::” 来调用父类中被覆盖的方法;

一种是使用 “parent::” 的方试来调用父类中被覆盖的方法;

方法的扩展

<?php
class Student extends Person{
 public $name;
 public $age;
 public function __construct($name="",$age=25){
  parent::__construct($name,$age);
  $this->age =$age;
 }
 public function say(){
  parent::say();
  echo ",今年".$this->age."岁了" ;
 }
}
?>

上面所描述的只是重新加载了父类的属性和方法,不是真正意义上的重载,只能说是子类对父类进行了扩展,在php中,也存在重载(overloading)一词,但跟一般面向语言中的重载意义不同。

php中重载(overloading)参考: PHP面向对象_重载(overloading)

php中模拟一般面向语言中的方法重载,请参考:PHP面向对象_模拟一般面向对象语言中的方法重载

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
php smarty的预保留变量总结
Dec 04 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php简单分页类实现方法
Feb 26 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
php将xml转化对象的实例详解
Nov 17 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 #PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 #PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 #PHP
PHP Cli 模式设置进程名称的方法
Jun 12 #PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 #PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 #PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 #PHP
You might like
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
浅析is_writable的php实现
2013/06/18 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
js闭包用法实例详解
2016/12/13 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python中Collection的使用小技巧
2014/08/18 Python
Python中的True,False条件判断实例分析
2015/01/12 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python爬取淘宝商品销量信息
2018/11/16 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
幼儿园运动会入场词
2014/02/10 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
环保倡议书400字
2014/05/15 职场文书
通信工程求职信
2014/07/16 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
个人借款协议书范本
2014/11/17 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python