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下使用curl模拟用户登陆的代码
Sep 10 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
解析PHP 5.5 新特性
Jul 02 PHP
php preg_replace替换实例讲解
Nov 04 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP解决中文乱码
Apr 28 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP实现的多维数组排序算法分析
Feb 10 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
ajax 文件上传应用简单实现
2009/03/03 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
深入理解Python中各种方法的运作原理
2015/06/15 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
数控专业大学生的自我鉴定
2013/11/13 职场文书
教师专业自荐书范文
2014/02/10 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
质量保证书格式模板
2015/02/27 职场文书
职位证明模板
2015/06/23 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle