php中接口和抽象类的区别

抽象类与接口的区别

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

a.接口是通过 interface 关键字来定义的, 抽象类是通过abstract关键字来定义的。
b.对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字extends实现的,使用时要特别注意。
c.接口没有成员属性,抽象类有成员属性,但是可以声明类常量,抽象类可以写普通方法,抽象方法和接口一样不能有方法体,只能有方法名,接口方法只能是public function定义而且不能有方法体。
d.接口没有构造函数,抽象类可以有构造函数
e.接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。
f.一个类可以同时实现多个接口,但是只能实现一个抽象类。

相同点:抽象方法与接口的函数体内不能写任何东西,连两个大括号都不能写!抽象类和接口都必须继承使用不能直接实例化。如:function getName();这样就行了

 

//我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都不行,如果子类没有实现这些话,就无法运行。   实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不行,但是具体你怎么去做,我不管,那是你的事,如
//接口
interface Shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}

class BaseShop implements Shop
{
public function buy($gid)
{
echo('你购买了ID为 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你卖了ID为 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID为 :'.$gid.'的商品');
}
}

$BaseShop = new BaseShop;

$BaseShop->buy(1);


//抽象类
abstract class BaseShop
{
public $username;

public function buy($gid)
{
echo('你购买了ID为 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你卖了ID为 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID为 :'.$gid.'的商品');
}

abstract function test($ab,$c);
}
class BallShops extends BaseShop
{
var $itme_id = null;
public function __construct()
{
$this->itme_id = 2314;
}
public function open()
{
$this->sell($this->itme_id);
}

function test($cc,$sa){

echo rand(1,10);

}
}

$BallShop = new BallShops;
$BallShop->test(1,2,4);
posted @ 2020-07-31 20:32  快乐的在一起  阅读(325)  评论(0编辑  收藏  举报