讨论数量:
这是契约也叫接口,相当于现实中的合同,保证类中的 serializeData
方法传入的参数必须实现 DataTimeInterface
中的接口,否则不能保证 return $data->format('Y-m-d');
这段代码的正确。
而且这个对象还能做一些事情
实际上这个对象能做的事情是DataTimeInterface
里规定的方法
再打个比喻,serializeData
方法假如要播放一个视频,那接收参数必须实现了播放功能,不管你是qq播放器还是迅雷播放器,如果没有实现这个契约的,就会报错。
// 假如这是播放器的契约,必须实现播放功能
interface DataTimeInterface {
public function format(string $f);
}
// qq播放器必须实现契约,否则就会报错
class DateTimeFormat implements DataTimeInterface {
public function format(string $f){
return date($f, time());
}
}
// qq播放器符合契约,合格
var_dump( (new DateTimeFormat) instanceof DataTimeInterface);// true
serializeData(DataTimeInterface $data)
就是一种写法,DataTimeInterface
相当于播放器接口(或契约),$data
就是qq播放器或者什么播放器,传入一个记事本肯定会报错。
可以再打个比喻,一个笔记本电脑厂家,不可能所有零件都自己生产吧,会从各个厂家购买,购买的零件能不能用? 你不得说明规格啥的,和这里是一样的。
推荐文章: