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

资源魔 33 0

本文指标:

一、理解PHP中形象类的界说

二、理解PHP中形象类的作用

三、理解PHP中形象类的应用场景

四、把握PHP中形象类的详细完成

仍是依照以前一向的思绪,咱们经过3W1H的形式进行学习,那末起首咱们来理解一下

(一)、理解PHP中形象类的界说(What)

形象类往往用来表征对成绩畛域进行剖析、设计中患上出的形象概念,是对一系列看下来没有同,然而实质上相反的详细概念的形象。通常正在编程语句顶用 abstract 润饰的类是形象类

以及接口的没有同的地方正在于,接口中的办法都是没有完成的,只是单纯的界说,然而形象类中的办法是能够完成的。

(二)、理解PHP中形象类的作用(Why)

正在PHP中的类傍边,有不少类会被一直的重写,这个时分咱们能够应用形象类,怎样做呢?就是先写一个公共的类,而后实例化之后咱们能够反复去挪用。这样能够进步代码的可重用性

(三)、理解PHP中形象类的应用场景(Where)

一、假如发古代码中不少类都有类似或许独特的办法,咱们能够把这些相反或许类似的办法抽离进去,封装到形象类中。

形象类以及接口有点类似,能够这么说,接口是一个非凡的形象类,只不外接口外面全都是形象的办法,(所谓形象就是不详细的完成),然而形象类中的局部办法,是能够具有完成的性能,

(四)、把握PHP中形象类的详细完成(How)

总结:

一、形象类的界说经过abstract 界说,比方abstract class 类名{}

二、形象类的办法的界说也是经过abstract界说,比方abstract public function 办法名(){}

三、形象类是不克不及被实例化的

四、要承继一个形象类,经过要害字extends

五、形象类的子类必需要完成形象类中未完成的一切办法,也就是说要重写形象类中一切abstract的办法

六、形象类的子类尽管不完成形象类中的曾经完成的办法,同样能够挪用这些办法,其实连系承继咱们能够很好了解这点

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

(五)、详细代码

案例1、

理论指标:

一、形象类的界说经过abstract 界说,比方abstract class 类名{}

二、形象类的办法的界说也是经过abstract界说,比方abstract public function 办法名(){}

详细代码以下:

<?php
abstract class Animal{
    abstract public function eat();//形象办法
    //呼吸
    public function breath(){
        //一切植物的呼吸办法都是同样的,就没有需求应用多态了
        echo "呼吸<br/>";
    }
}
?>

案例2、

理论指标:

一、形象类是不克不及被实例化的

详细代码以下:

<?php
abstract 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

案例4、

理论指标:

一、要承继一个形象类,经过要害字extends

二、形象类的子类必需要完成形象类中未完成的一切办法,也就是说要重写形象类中一切abstract的办法

详细代码以下:

<?php
abstract 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办法

详细代码以下:

<?php
abstract 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办法

案例5、

理论指标:

一、形象类的子类尽管不完成形象类中的曾经完成的办法,同样能够挪用这些办法,其实连系承继咱们能够很好了解这点

详细代码以下:

<?php
abstract 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();
$monkey->breath();
?>

运转后果以下:

我是山公类中的eat
形象类中的呼吸办法

(六)、学致使用

成绩:将如下实在场景,用形象类复原进去

小芳下学回抵家中,一进家门,只见心爱的小狗“小爱”即刻就对客人摇起了尾巴,小芳笑了笑,走过来,抱起了小狗,最初,小芳以及小狗亲了一口

思绪剖析:

一、工具剖析:先生,小狗

二、工具属性剖析:连系(事实世界+详细场景)

先生:称号

狗:称号

三、工具办法剖析:连系(事实世界+详细场景)

先生:

(1)、下学

(2)、回抵家中

(3)、走路

(4)、看

(5)、笑

(6)、抱货色

(7)、亲嘴

狗:

(1)、看

(2)、摇尾巴

(3)、亲嘴

四、咱们发现这2个工具都有类似的办法,看,亲嘴,以是咱们能够把它们封装到形象类中,而且这2个办法没有需求子类去重写,由于都是同样的

详细代码以下:

<?php
abstract 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;
   }
    // 一、下学
   public function offschool(){
       echo $this->name."下学了<br/>";
   }
   //回家
   public function goHome(){
    echo $this->name."回抵家中<br/>";
   }
    // 二、走路
    public function walk(){
        echo $this->name."走了过来<br/>";
    }
    // 三、看

    // 四、笑
    public function smile(){
        echo $this->name."浅笑了<br/>";
    }
    // 五、抱货色
    public function hug($obj){
        echo $this->name."抱起了".$obj->name."<br/>";
    }
    // 六、亲嘴
   
}
//狗
class Dog extends Animal{
   public $name = "";
   public function __construct( $name ){
       $this->name = $name;
   }
    //一、看

    //二、摇尾巴
    public function wagTail(){
        echo $this->name."摇了尾巴<br/>";
    }

    //三、亲嘴
}
//创立工具
$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);
?>

运转后果为:

小芳下学了
小芳回抵家中
瞥见了小爱
小爱摇了尾巴
小芳浅笑了
小芳走了过来
小芳抱起了小爱
小芳亲了小爱一口
小爱亲了小芳一口

(七)、总结

一、本文次要解说了PHP中形象类的界说,作用和详细的完成

心愿本文能给各人带来肯定的协助,谢谢!!!

以上就是PHP面向工具之形象类详解(代码实例)的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 面向对象

抱歉,评论功能暂时关闭!