php中抽象类和接口的对比

抽象类

抽象类是至少具有一个抽象方法的类。继承抽象类的类需要实现抽象方法。不能通过抽象类创建对象,需要通过抽象类的继承类来创建对象。

接口

对方法的抽象叫做接口。通俗点说,就是接口内的方法必须都是抽象方法。

接口的使用

接口的目的是对类进行约束,我们在开发设计的时候,如果我们想要某个类具有某些功能的话,我们就可以设计出接口,让后让其他人写的类实现我们的接口,那么我们就可以调用我们接口中的抽象方法,因为实现接口的类一定要实现接口的方法。

抽象类的使用

接口的目的是对类的功能进行约束,那么抽象类的作用更多在于复用,也就说有些方法是公用的,我们没有必要在类a中写一遍,让后在类b中写一遍,我们只要定义一个抽象类,然后a和b都继承这个抽象类,那么他们都可以直接调用这个抽象类中实现好的方法。

并且因为a和b在对同一个方法有不同的实现,这个方法就可以定义位抽象方法,让后a和b自己去实现不同的方法。可以看到抽象类既给子类提供了一些功能,有允许子类去实现自己的功能,这就是抽象类的作用。

抽象类和接口的区别

  • 在抽象类中,不必每个方法都应该抽象。但是在接口中,每种方法都是抽象的。

  • php接口的方法必须是公共的,默认情况下不能将访问修饰符假定为公共。在方法抽象的PHP类可以是公共或保护两者。

  • 接口支持多重继承,但抽象类不支持多重继承.

  • 接口不能包含构造方法,但抽象类可以包含抽象方法。

  • 接口没有成员变量,但是抽象类有成员变量。