php中接口和抽象类的区别有哪些

  介绍

这篇文章主要介绍了php中接口和抽象类的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

区别为:1,接口是通过接口关键字来定义的,抽象类是通过抽象的关键字来定义的;2、接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装;3,接口没有构造函数,抽象类可以有构造函数。

<强> 1,抽象类与接口的区别

在学习php面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用php的两个方法,面向对象的程序设计将会更加合理,清晰高效。

。接口是通过接口关键字来定义的,抽象类是通过抽象的关键字来定义的。
b。对接口的使用方式是通过关键字实现来实现的,而对于抽象类的操作是使用类继承的关键字扩展实现的,使用时要特别注意。
c。接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。
d。接口没有构造函数,抽象类可以有构造函数。
e。接口中的方法都是公共类型,而抽象类中的方法可以使用私人的,保护或公众来修饰。
f。一个类可以同时实现多个接口,但是只能实现一个抽象类。

相同点:抽象方法与接口的函数体内不能写任何东西,连两个大括号都不能写! ! !如:函数getName();这样就行了

<强> 2,接口

使用接口(接口),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过接口关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公的有,这是接口的特性。

实现(实现)

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

注意:
实现多个接口时,接口中的方法不能有重名。

注意:
接口也可以继承,通过使用扩展操作符。

注意:
类要实现接口,必须使用和接口中所定义的方法完全一致的方式,否则会导致致命错误。

常量

接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。

,php & lt; ?//,声明一个& # 39;iTemplate& # 39;接口   interface  iTemplate   {   ,,,public  function  setVariable($名字,,$ var);   ,,,public  function  getHtml($模板);   }//,实现接口//,下面的写法是正确的   class  Template  implements  iTemplate   {   ,,,private  vars 美元;=,数组();      ,,,public  function  setVariable (var)美元美元的名字,,   ,,,{   ,,,,,,,这个→美元var[名字]美元,=,$ var;   ,,,}      ,,,public  function  getHtml(模板)   ,,,{   ,,,,,,,foreach ($ this→vars  as  name 美元;=祝辞,美元值),{   ,,,,,,,,,,,template 美元;=,str_replace(& # 39;{& # 39;,只name 美元;只& # 39;}& # 39;,,美元的价值,美元模板);   ,,,,,,,}      ,,,,,,,return 美元模板;   ,,,}   }//,下面的写法是错误的,会报错,因为没有实现,getHtml ():   错误://,Fatal  Class  BadTemplate  contains  1, abstract 方法//,以及must  therefore  be  declared  abstract  (iTemplate:: getHtml)   class  BadTemplate  implements  iTemplate   {   ,,,private  vars 美元;=,数组();      ,,,public  function  setVariable (var)美元美元的名字,,   ,,,{   ,,,,,,,这个→美元var[名字]美元,=,$ var;   ,,,}   }   比;   Example  # 2,可扩充的接口      php & lt; ?   interface    {   ,,,public  function  foo ();   }      interface  b  extends    {   ,,,public  function 巴兹(Baz 美元baz);   }//,正确写法   class  c  implements  b   {   ,,,public  function  foo ()   ,,,{   ,,,}      ,,,public  function 巴兹(Baz 巴兹美元)   ,,,{   ,,,}   }//,错误写法会导致一个致命错误   class  d  implements  b   {   ,,,public  function  foo ()   ,,,{   ,,,}      ,,,public  function 巴兹(Foo  $ foo)   ,,,{   ,,,}   }   比;   Example  # 3,继承多个接口      php & lt; ?   interface    {   ,,,public  function  foo ();   }      interface  b   {   ,,,public  function 酒吧();   }      interface  c  extends  a, b   {   ,,,public  function 巴兹();   }      class  d  implements  c   {   ,,,public  function  foo ()   ,,,{   ,,,}      ,,,public  function 酒吧()   ,,,{   ,,,}      ,,,public  function 巴兹()   ,,,{   ,,,}   }   比;   Example  # 4,使用接口常量      php & lt; ?   interface    {   ,,,const  b =, & # 39; Interface 常数# 39;;   }//,输出接口常量   echo : b;//,错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。   class  b  implements    {   ,,,const  b =, & # 39; Class 常数# 39;;   }   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

php中接口和抽象类的区别有哪些