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 studentskill{
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();
?>

输出:

小学生考试
中学生考试
posted @   顾北清  阅读(360)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示