PHP中的特殊类,接口类和抽象类(都不能直接实例化)

接口类不用实例化,需要一一实现接口定义的所有方法。关键字interface implements

接口interface 是一个规定,给人继承用的东西,有点像抽象类
在里面定义的方法,却不去实例化,而需要别的类去implements 它,而且必须一一实现接口定义的所有方法,
实际上接口类说白了,就是一个类的模板,一个类的规定,


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


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.'的商品');
}
}
————————————————————————————————————————————————————————————————————————————————————————————————————————

抽象类&抽象方法  (只能被继承)(关键字 abstract)(继承关键字extends)

具有抽象方法的类为抽象类,
抽象方法即为没有内容的空方法,要求子类进行完善内容,
抽象类不能实例化,只能继承,
通过extends来实现,抽象类中也可以定义普通方法
 
父类方法执行方式不确定,但子类还都有这个方法
例1:如交通工具类:定义抽象方法控制交通工具运行方式,这样每个交通工具如飞机,汽车都要重写父类方法。如果在父类工具类定义该方法(比如在地上走)没有任何意义,因为每个交通工具都要重写(飞机要重写方法,船要重写方法),所以针对你类方法的不确定性,我们需要抽象方法,实现多态。
例2:定义动物类,每个动物都有叫声方法,但是表面不同,所以要定义为抽象类,让每种动物类去实现功能。
 
当父类为抽象类时,子类必须重写父类的抽象方法
抽象类里不一定非要写抽象方法,但有抽象方法的类必须定义为抽象类
抽象类必须继承使用
抽象方法不能有主体即{}
<?php
abstract class AbstractClass
{
   // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);
 
    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue();
    }
}
________________________________________________________________________________________
















原文地址:https://www.cnblogs.com/yeyublog/p/5857986.html