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的GROUP_CONCAT()函数使用方法
Mar 28 PHP
php 特殊字符处理函数
Sep 05 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
Windows下php+mysql5.7配置教程
May 16 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
详解PHP中的8个魔术常量
Jul 06 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中对用户身份认证实现两种方法
2011/06/04 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
化妆品促销活动总结
2015/05/07 职场文书
医院见习总结
2015/06/24 职场文书
微信早安问候语
2015/11/10 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript