PHP继承
PHP继承
这是一篇迟来的更新,因为它应该在前两天就被更新了,但是由于我英语四级没过!没过!没过!导致我心情低落,所以就玩了几天的游戏,哦不,进行了几天反思,痛定思痛 痛何如哉!
以下都是我个人的理解,有错的地方还望不吝赐教。
为什么需要继承?
继承就是 一个子类通过extends父类把父类的属性和方法继承下来。
假设现在现在需要写两个类,小学生类和高中生类,小学生会说话,走路,考试,高中生也会说话走路,考试,那么如果你写两遍说话,走路,考试,那么就会显得臃肿,管理起来也会麻烦很多,如果定义一个类叫做学生类包含说话,走路,考试,然后让小学生类和高中生类来继承这个学生类就会显得好很多,比如这样。
<?php class student{ function speak(){ echo '说话'; } function walk(){ echo '走路'; } function test(){ echo '考试'; } } class pupil extends student{ function test(){ echo '小学生考试'; } } class senior extends student{ function test(){ echo '高中生考试'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); echo '<br />'; $senior=new senior(); $senior->speak(); $senior->walk(); $senior->test(); ?>
输出:
说话走路小学生考试 说话走路高中生考试
这样代码管理起来就会好很多。
假设现在小学生要学习一个新的技能吃东西,我现在这样写。
<?php class student{ function speak(){ echo '说话'; } function walk(){ echo '走路'; } function test(){ echo '考试'; } } class skill{ function eat(){ echo '吃东西'; } } class pupil extends student,skill{ function test(){ echo '小学生考试'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); $pupil->eat(); ?>
如果这样写,那么就会报错:
Fatal error: Class 'studentskill' not found in D:\xampp\htdocs\1.php on line 18
因为php中是不能这样实现多继承的,如果想要实现多继承可以这么写:
<?php class student{ function speak(){ echo '说话'; } function walk(){ echo '走路'; } function test(){ echo '考试'; } } class skill extends student{ function eat(){ echo '吃东西'; } } class pupil extends skill{ function test(){ echo '小学生考试'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); $pupil->eat(); ?>
输出:
说话走路小学生考试吃东西
先用一个skill类继承student类,然后再用pupil类继承skill类,这样就相当于pupil类继承了student类和skill类。
方法重写
如果要实现的两个类有共同特征,那么就可以将这个共同的特征抽象出一个父类。
比如,有小学生类和中学生类,这样的两个类,他们都是学生,那么就可以抽象出一个学生类,学生都会考试,那么就把考试这个方法写在学生这个类里面。
那么问题就是,小学生是小学生的考试,中学生是中学生的考试,我不可能都输出考试,这里就用到了方法重写。
在子类中定义一个与父类一样的方法,这样执行的时候,父类中的方法就会被覆盖,从而输出的只有子类中定义的方法。
举例:
<?php class student{ function test(){ echo '考试'; } } class pupil extends student{ function test(){ echo '小学生考试'; } } class senior extends student{ function test(){ echo '中学生考试'; } } $pupil=new pupil(); $pupil->test(); echo '<br />'; $senior=new senior(); $senior->test(); ?>
输出:
小学生考试 中学生考试
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析