欢迎来到[自学php网] ①群 AG亚游集团

AG亚游集团 > php专栏 > php综合实列 >

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

来源:未知 ?? 时间:2018-12-25 13:59?作者:小飞侠

[导读] 本文实例讲述了PHP面向对象程序设计(OOP)之方法重写(override)操作。分享给大家供大家参考,具体如下: 因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数...

本文实例讲述了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,那么子类中要覆盖的权限就要是protected和public,如果父类的方法是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;
}
}

最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有AG亚游集团

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

穆里奇拉伤不算太严重 阿洛下场能否复出成疑 外媒吐嘈美国无人驾驶法律:亚洲政策环境最好 杨震足彩:马竞客场难胜 莱比锡客战不败 皇马大将:C罗不是皇马历史最佳 他才是旗帜之人 阿富汗总统加尼:与塔利班和谈不设前提条件 国家田径队成立党支部 张国伟积极争取入党 美参院通过这项法案 台当局却慌了害怕解放军武统 智慧城市建设风再起 让百姓每年“多了”125个小时 杠杆末路:“杠杆高人”们到了忧心自己命运的时刻 广厦预备队101-63狂胜广州38分 王仔路砍26分 巴尔巴索锦标赛梅瑞特1杆优势夺冠 张新军跌至T31 颤抖吧!詹皇称状态达生涯最佳 不care主场优势
两U23小将合力完成苏宁18年首球 叶尔凡首秀抢眼 高盛:标普500指数2018年料仍有上涨空间 作家六六质疑京东全球购售假投诉无门 京东称正调查 驻美大使正告美:没人能阻止中国统一 咱拭目以待 全球首个浮岛国家2022年建成 将使用加密货币 航程近4万海里 向阳红01完成中国首次环球海洋科考 应对新疆暴雨洪涝灾情 国家Ⅳ级救灾应急响应启动 上期所修订白银期货合约 盘前:关注上市公司财报 美国股指期货走平 恒大高层谈逆转:这段时间压力太大 0-2时候冒冷汗 司机车窗抛物被罚200元 这小动作甚至能让你坐牢 德国黑森州一养老院发生火灾 致1人死亡24人受伤
沙特:若伊朗继续发展核计划 我们也将寻求核武器 韩国三星和半导体工人组织就白血病争议达成妥协 阿卡普尔科赛兹维列夫进四强 波特罗淘汰蒂姆 意大利2018年大选拉开帷幕 八张图看懂经济现状 邦达亚洲:贸易战忧虑影响发酵 美指失守90.00 澳官方:去年80万人赴澳求学 中国最多占38% 日本研发猫用人造血液:没有血型差异 不会排异 巴萨10年花1.5亿买中后卫 成功的只有皮克他们仨 太平洋岛国峰会将举办 多国领导人东京受邀观相扑 养20头牛一年赚多少钱 品牌设计公司排行榜 有什么好的发展项目 在家挣钱的活 AG亚游集团