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中关于普通表单多文件上传的处理方法
Mar 25 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
AngularJS中的模块详解
2015/01/29 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
python调用新浪微博API项目实践
2014/07/28 Python
python字典get()方法用法分析
2015/04/17 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
python中logging库的使用总结
2017/10/18 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Python @property原理解析和用法实例
2020/02/11 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Python datetime模块使用方法小结
2020/06/18 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
花店创业计划书范文
2014/02/07 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS