·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> php中抽象类和接口的特点、区别和选择

php中抽象类和接口的特点、区别和选择

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
php中抽象类和接口的特点、区别和选择

一.特点:

1、抽象类特点

(1) 用 abstract 来修饰一个类,那么这个类就是抽象类;抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错。(2) 用abstract 来修饰一个方法,那么该方法就是抽象方法;(3) 如果类中有一个抽象方法,那么该类就必须定义为抽象类;但反过来,抽象类里并不一定要有抽象方法。另外,抽象类里也可以有普通方法。(4) 抽象方法不能有方法体。即abstract function abc();------后面不能加大括号{.........}。(5)、一个类继承了某个抽象类,那么,它必须实现抽象类中所有的抽象方法(除非,它也这些抽象方法声明为抽象的,相当于抽象类继承了抽象类)。

2、接口的特点

(1) 接口的方法必须是公开的。(2) 接口的方法默认是抽象的,所以不在方法名前面加abstract。(3) 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。(4) 类可以实现多个接口(用逗号隔开)(5) 接口也可以继承接口。

二. 区别:

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。

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

4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用PRivate,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

三 .选择:

  • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
  • 如果必须从多个来源继承行为,就使用接口。
  • 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

四.示例:

abstract class people{var $name;abstract function sayName();}interface mother{function beautiful();}interface father{function clever();}class son extends people implements mother,father{function beautiful(){echo "i'm very beautiful!";}function clever(){echo "i'm very clever!";}function __construct($name){$this->name = $name;}function sayName(){echo $this->name;}}$zww = new son("Tom");$zww->beautiful();$zww->clever();$zww->sayName();

  输出结果:i'm very beautiful!i'm very clever!Tom