PHP面向对象程序设计(OOP)之方法重写(override)操作示例


Posted in PHP onDecember 21, 2018

本文实例讲述了PHP面向对象程序设计(OOP)之方法重写(override)操作。分享给大家供大家参考,具体如下:

因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的,所以php是不能重载的。

虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。

<?php
class Person
{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄
//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//这个人可以说话的方法, 说出自己的属性
function say() {
echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
}
}
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
?>

另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

例如,如果父类方法的访问权限是protected,那么子类中要覆盖的权限就要是protectedpublic,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。

上面的例子, 我们就在“Student”子类里覆盖了继承父类里面的”say()”的方法,通过覆盖我们就实现了对“方法”扩展。但是,像这样 做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“Person”类里面的“say()”方法有里面有 100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这 个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:

  • 一种是使用父类的“类名::“来调用父类中被覆盖的方法;
  • 一种是使用“parent::”的方试来调用父类中被覆盖的方法;
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();
//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}

现在用两种方式都可以访问到父类中被覆盖的方法,我们选那种方式最好呢?用户可能会发现自己写的代码访问了父类的变量和函数。如果子类非常精炼或者父类非 常专业化的时候尤其是这样。 不要用代码中父类文字上的名字,应该用特殊的名字 parent,它指的就是子类在 extends 声明中所指的父类的名字。这样做可以避免在多个地方使用父类的名字。如果继承树在实现的过程中要修改,只要简单地修改类中 extends 声明的部分。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
php取得字符串首字母的方法
Mar 25 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 PHP
PHP支付宝当面付2.0代码
Dec 21 #PHP
php json转换相关知识(小结)
Dec 21 #PHP
PHP后期静态绑定实例浅析
Dec 21 #PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 #PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 #PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 #PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 #PHP
You might like
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
PHP基本语法总结
2014/09/06 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
日期 时间js控件
2009/05/07 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Python 如何提高元组的可读性
2019/08/26 Python
Python列表解析操作实例总结
2020/02/26 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
广告学毕业生求职信
2014/01/30 职场文书
技术总监管理职责范本
2014/03/06 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
新春寄语大全
2014/04/09 职场文书
政府法律服务方案
2014/06/14 职场文书
房屋出租委托书格式
2014/09/23 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
pytorch--之halfTensor的使用详解
2021/05/24 Python