• 技术文章 >后端开发 >php教程

    php抽象类和接口之间有什么区别?

    青灯夜游青灯夜游2020-07-16 16:37:08转载743
    本篇文章给大家介绍一下php抽象类和接口的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    抽象类

    官方描述请查看文档,下面是官方描述的梳理版本:

    (抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

    如:

    abstract class  AbstractClass
     {
         // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}
         abstract protected function  getValue ();
         abstract protected function  prefixValue ( $prefix );
    
         // 普通方法(非抽象方法)
         public function  printOut () {
            print  $this -> getValue () .  "\n" ;
        }
    }

    补充:

    1、抽象类可以有成员属性。

    2、有人问:抽象方法是否可以定义为私有,答案是不可以,因为抽象接口的目的就是为了抽象出类模型用来继承,定义为私有,外部访问不到,偏移了设计目的,会报错。

    3、抽象类可以实现接口,且可以不实现其中的方法

    abstract class Sutdent extends Human
    {
        abstract private function study();
    }
    Fatal error: Abstract function Sutdent::study() cannot be declared private in ...

    4、抽象类可以继承抽象类,且不能重写抽象父类的抽象方法。这样的用法,可以理解为对抽象类的扩展。如

    abstract class  Human
    {
        abstract function eat();
    }
    
    abstract class Sutdent extends Human
    {
        abstract function study();
        //abstract function eat(); 若重写抽象父类的抽象方法eat()会报错 Fatal error: Can't inherit abstract function Human::eat() (previously declared abstract in Sutdent) in ...
    }

    接口

    1、接口的定义

    interface Play  
    {  
        const LEVEL=10;  
        public function PlayLOL();  
        public function PlayFootball();  
    }

    2、接口的实现

    要实现一个接口,使用 implements 操作符。非抽象类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

    补充

    interface Play  
    {  
        const LEVEL=10;  
        public function PlayLOL();  
        public function PlayFootball();  
    } 
    
    interface Read  
    {  
        public function ReadNovel();  
    } 
        
    abstract class  Human
    {
        abstract function eat();
    }
    //抽象类可以实现接口后不实现其方法,可以继承一个抽象类的同时实现多个接口注意必须要把extends语句写在implements前面,否则会报错
    abstract class Sutdent extends Human implements Play,Read
    {
        abstract function study();
    }

    3、接口的继承

    接口可以继承另一个或多个接口,使用extends关键字,多个用 ',' 隔开,但是不能实现另一个接口,当然更不能继承抽象类(继承抽象类报错:Fatal error: PlayGame cannot implement Human - it is not an interface in D:\11\index.php on line 10

    interface Play  
    {   
        public function PlayFootball();  
    }
    interface PlayNew  
    {   
        public function PlayFootballNew();  
    }
    
    interface PlayGame extends play,PlayNew
    {  
        public function PlayLOL();  
    }

    区别:

    1.对接口的继承使用implements,抽象类使用extends.

    2.接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量

    3.接口没有构造函数,抽象类可以有

    4.接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰

    5.一个类可以继承多个接口,但只能继承一个抽象类

    相关推荐:PHP教程

    以上就是php抽象类和接口之间有什么区别?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除
    专题推荐:php 抽象类 接口
    上一篇:手把手教你学PHP,学习心得分享!! 下一篇:超简单开发自己的php框架一点都不难!
    大前端线上培训班

    相关文章推荐

    • php接口有哪几种• php接口有几部分组成?• php内存不足怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网