首页后端开发PHPPHP面向对象之抽象类详解(代码实例)

PHP面向对象之抽象类详解(代码实例)

时间2024-02-02 03:48:03发布访客分类PHP浏览116
导读:收集整理的这篇文章主要介绍了PHP面向对象之抽象类详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。本文目标:1、了解PHP中抽象类的定义2、了解PHP中抽象类的作用3、了解PHP中抽象类的使用场景4、掌握PHP中抽象类的具...
收集整理的这篇文章主要介绍了PHP面向对象之抽象类详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。

本文目标:

1、了解PHP中抽象类的定义

2、了解PHP中抽象类的作用

3、了解PHP中抽象类的使用场景

4、掌握PHP中抽象类的具体实现

还是按照之前一贯的思路,我们通过3W1H的方式进行学习,那么首先我们来了解一下

(一)、了解PHP中抽象类的定义(What)

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类

和接口的不同之处在于,接口中的方法都是不实现的,只是单纯的定义,但是抽象类中的方法是可以实现的。

(二)、了解PHP中抽象类的作用(Why)

在PHP中的类当中,有很多类会被不断的重写,这个时候我们可以使用抽象类,怎么做呢?就是先写一个公共的类,然后实例化之后我们可以重复去调用。这样可以提高代码的可重用性

(三)、了解PHP中抽象类的使用场景(Where)

1、如果发现代码中很多类都有相似或者共同的方法,我们可以把这些相同或者相似的方法抽离出来,封装到抽象类中。

抽象类和接口有点相似,可以这么说,接口是一个特殊的抽象类,只不过接口里面全都是抽象的方法,(所谓抽象就是没有具体的实现),但是抽象类中的部分方法,是可以具备实现的功能,

(四)、掌握PHP中抽象类的具体实现(How)

总结:

1、抽象类的定义通过abstract 定义,比如abstract class 类名{ }

2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){ }

3、抽象类是不能被实例化的

4、要继承一个抽象类,通过关键字extends

5、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法

6、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点

每个总结都是通过实践得出来的,现在我们用实践来演示总结,这样可以促进理解,让每个总结理解起来更加清晰,直观

(五)、具体代码

案例一、

实践目标:

1、抽象类的定义通过abstract 定义,比如abstract class 类名{ }

2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){ }

具体代码如下:

?phpabstract class Animal{
        abstract public function eat();
//抽象方法    //呼吸    public function breath(){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "呼吸br/>
    ";
    }
}
    ?>
    

案例二、

实践目标:

1、抽象类是不能被实例化的

具体代码如下:

?phpabstract class Animal{
        abstract public function eat();
//抽象方法    //呼吸    public function breath(){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "呼吸br/>
    ";
    }
}
    $animal = new Animal();
    ?>

运行结果为:

Fatal error: Uncaught Error: Cannot instantiate abstract class Animal in D:\E-class\class-code\classing\index.php:10 Stack trace: #0 { main} thrown in D:\E-class\class-code\classing\index.php on line 10

案例四、

实践目标:

1、要继承一个抽象类,通过关键字extends

2、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法

具体代码如下:

?phpabstract class Animal{
        abstract public function eat();
//抽象方法    //呼吸    public function breath(){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "呼吸br/>
    ";
    }
}
//定义猴子class Monkey extends Animal{
    }
    ?>
    

如果Monkey类继承了抽象类,但不实现里面的abstract方法,那么运行结果为:

Fatal error: Class Monkey contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Animal::eat) in D:\E-class\class-code\classing\index.php on line 13

接下来我们来实现abstract方法

具体代码如下:

?phpabstract class Animal{
        abstract public function eat();
//抽象方法    //呼吸    public function breath(){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "呼吸br/>
    ";
    }
}
//定义猴子class Monkey extends Animal{
    //实现抽象类中的抽象方法    public function eat(){
            echo "我是猴子类中的eat方法br/>
    ";
    }
}
    $monkey = new Monkey();
    $monkey->
    eat();
    ?>
    

运行结果如下:

我是猴子类中的eat方法

案例五、

实践目标:

1、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点

具体代码如下:

?phpabstract class Animal{
        abstract public function eat();
//抽象方法    //呼吸    public function breath(){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "抽象类中的呼吸方法br/>
    ";
    }
}
//定义猴子class Monkey extends Animal{
    //实现抽象类中的抽象方法    public function eat(){
            echo "我是猴子类中的eatbr/>
    ";
    }
}
    $monkey = new Monkey();
    $monkey->
    eat();
    $monkey->
    breath();
    ?>
    

运行结果如下:

我是猴子类中的eat
抽象类中的呼吸方法

(六)、学以致用

问题:将以下真实场景,用抽象类还原出来

小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,抱起了小狗,最后,小芳和小狗亲了一口

思路分析:

1、对象分析:学生,小狗

2、对象属性分析:结合(现实世界+具体场景)

学生:名称

狗:名称

3、对象方法分析:结合(现实世界+具体场景)

学生:

(1)、放学

(2)、回到家中

(3)、走路

(4)、看

(5)、笑

(6)、抱东西

(7)、亲嘴

狗:

(1)、看

(2)、摇尾巴

(3)、亲嘴

4、我们发现这2个对象都有相似的方法,看,亲嘴,所以我们可以把它们封装到抽象类中,并且这2个方法不需要子类去重写,因为都是一样的

具体代码如下:

?phpabstract class Animal{
    //看    public function look($obj){
            //所有动物的呼吸方法都是一样的,就不需要使用多态了        echo "看见了".$obj->
    name."br/>
    ";
    }
    //亲嘴    public function kiss($Fromobj,$toobj){
            echo $fromobj->
    name."亲了".$toobj->
    name."一口br/>
    ";
    }
    }
//学生class Student extends Animal{
       public $name = "";
   public function __construct( $name ){
           $this->
    name = $name;
   }
    // 1、放学   public function offschool(){
           echo $this->
    name."放学了br/>
    ";
   }
   //回家   public function goHome(){
        echo $this->
    name."回到家中br/>
    ";
   }
    // 2、走路    public function walk(){
            echo $this->
    name."走了过去br/>
    ";
    }
    // 3、看    // 4、笑    public function smile(){
            echo $this->
    name."微笑了br/>
    ";
    }
    // 5、抱东西    public function hug($obj){
            echo $this->
    name."抱起了".$obj->
    name."br/>
    ";
    }
    // 6、亲嘴   }
//狗class Dog extends Animal{
       public $name = "";
   public function __construct( $name ){
           $this->
    name = $name;
   }
    //1、看    //2、摇尾巴    public function wagTail(){
            echo $this->
    name."摇了尾巴br/>
    ";
    }
    //3、亲嘴}
    //创建对象$xf = new Student("小芳");
    $dog = new Dog("小爱");
    //小芳放学了$xf->
    offschool();
    //小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,//抱起了小狗,最后,小芳和小狗亲了一口//小芳回答家中$xf->
    goHome();
    //小芳看见小狗$xf->
    look($dog);
    //小狗摇尾巴$dog->
    wagTail();
    //小芳笑了笑$xf->
    smile();
    //小芳走过去$xf->
    walk();
    //抱起小狗$xf->
    hug($dog);
    //小芳亲了小狗$xf->
    kiss($xf,$dog);
    //小狗也亲了小芳$dog->
    kiss($dog,$xf);
    ?>
    

运行结果为:

小芳放学了
小芳回到家中
看见了小爱
小爱摇了尾巴
小芳微笑了
小芳走了过去
小芳抱起了小爱
小芳亲了小爱一口
小爱亲了小芳一口

(七)、总结

1、本文主要讲解了PHP中抽象类的定义,作用以及具体的实现

希望本文能给大家带来一定的帮助,谢谢!!!

以上就是PHP面向对象之抽象类详解(代码实例)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP面向对象之抽象类详解(代码实例)
本文地址: https://pptw.com/jishu/596320.html
PHP时间戳和日期格式相互转换 PHP面向对象之魔术方法(

游客 回复需填写必要信息