关于接口和类,我目前正在努力地使用PHP。这就是想法...我有一些实体实现的接口:
interface ExternallyPostable
{
public function isExternalPostingProhibited() : bool;
}
class JobOffer implements ExternallyPostable
{
public function isExternalPostingProhibited() : bool
{
return false;
}
}
class Event implements ExternallyPostable
{
public function isExternalPostingProhibited() : bool
{
return true;
}
}
对于每个实体,我都有一个类表示该特定实体的外部帖子,并且所有这些类都实现以下接口:
interface ExternalPost
{
public function setEntity(ExternallyPostable $entity) : ExternalPost;
public function getEntity() : ExternalPost;
}
我的问题是,这并不工作:
class JobOffer_Monster implements ExternalPost
{
protected $entity = null;
public function setEntity(JobOffer $entity) : JobOffer_Monster
{
$this->entity = $entity;
return $this;
}
public function getEntity() : JobOffer_Monster
{
return $this->entity;
}
}
PHP希望签名与接口之一匹配,在这种情况下,该接口太“宽”。为什么只要期望的类通过实现接口来履行合同,该类就不能对其参数和返回类型进行更严格的限制?