本文实例讲述了PHP面向对象程序设计(OOP)之方法重写(override)操作。分享给大家供大家参考,具体如下:
因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的,所以php是不能重载的。
虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。
<"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; } } "color: #0000ff">子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。例如,如果父类方法的访问权限是
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; } }
现在用两种方式都可以访问到父类中被覆盖的方法,我们选那种方式最好呢?用户可能会发现自己写的代码访问了父类的变量和函数。如果子类非常精炼或者父类非 常专业化的时候尤其是这样。 不要用代码中父类文字上的名字,应该用特殊的名字 parent
,它指的就是子类在 extends
声明中所指的父类的名字。这样做可以避免在多个地方使用父类的名字。如果继承树在实现的过程中要修改,只要简单地修改类中 extends
声明的部分。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 魏新雨《为你祈祷+新歌精逊2CD[WAV]
- 影心、明萨拉你选哪个?国外美女COS《博德3》
- 澳洲女子骑车跌入“自杀树”丛 疼痛持续9个月崩溃
- 育碧公布2024“她创力”计划:为女性游戏人提供辅导
- 刘美君.2017-千色·30总选3CD【环球】【WAV+CUE】
- 群星.2022-星河长明电视原声带【乐有奇思】【FLAC分轨】
- 陈淑桦.1995-淑桦盛开Forever【滚石】【WAV+CUE】
- 《再来一张》评测:出师成败皆系“赌”
- 《银河汉堡店》测评:我是银河走菜王!
- 《末日地带2》评测:酣畅淋漓的“和面”之旅
- 萧煌奇《没事的》[320K/MP3][96.22MB]
- 萧煌奇《没事的》[FLAC/分轨][263.38MB]
- 群星《音你而来 第6期》[320K/MP3][90.61MB]
- 交错战线爬塔攻略一览
- 战锤40K星际战士2全近战武器使用教学|近战武器连招表