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开发环境配置记录
Jan 14 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 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
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
php时间函数用法分析
2016/05/28 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
js tab效果的实现代码
2009/12/26 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Python选课系统开发程序
2016/09/02 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
详解Python的三种拷贝方式
2020/02/11 Python
Python unittest框架操作实例解析
2020/04/13 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
幼教毕业生自我鉴定
2014/01/12 职场文书
优秀小学生家长评语
2014/01/30 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
英语教学随笔感言
2014/02/20 职场文书
运动会标语
2014/06/21 职场文书
java中如何截取字符串最后一位
2022/07/07 Java/Android