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 相关文章推荐
PHP开发文件系统实例讲解
Oct 09 PHP
Session的工作方式
Oct 09 PHP
PHP SQLite类
May 07 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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的开发框架的现状和展望
2007/03/16 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
Javascript 解疑
2009/11/11 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python中six模块基础用法
2019/12/08 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
买房子个人收入证明
2014/01/16 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
贫困生证明范文
2015/06/16 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
选购到合适的激光打印机
2022/04/21 数码科技
Golang入门之计时器
2022/05/04 Golang