php接口分类_PHP 7接口,返回类型提示和s

我在PHP 7中使用返回类型提示遇到了问题。我的理解是,提示self意味着您打算让实现类返回自身。 因此,我在接口中使用了self来表明这一点,但是当我尝试实际实现接口时,出现了兼容性错误。

以下是我遇到的问题的简单演示:

interface iFoo

{

public function bar (string $baz) : self;

}

class Foo implements iFoo

{

public function bar (string $baz) : self

{

echo $baz . PHP_EOL;

return $this;

}

}

(new Foo ()) -> bar ("Fred")

-> bar ("Wilma")

-> bar ("Barney")

-> bar ("Betty");

预期输出为:

弗雷德   威尔玛   巴尼   贝蒂

我实际上得到的是:

PHP致命错误:Foo :: bar(int $ baz)的声明:Foo必须与iFoo :: bar(int $ baz):第7行的test.php中的iFoo兼容

事情是Foo是iFoo的实现,据我所知,该实现应该与给定的接口完全兼容。 我大概可以通过更改接口或实现类(或两者)以按名称返回提示接口的方式来代替使用self来暗示该接口,从而解决此问题,但我的理解是self的语义是“返回您刚刚称为的类的实例 方法”。 因此,从理论上讲,将其更改为接口意味着我可以返回任何实现接口的东西的实例,而当我的意图是要返回的实例时。

这是PHP的疏忽,还是故意的设计决策? 如果是前者,那么有没有机会在PHP 7.1中看到它的修复? 如果不是,那么暗示您的接口希望您返回刚刚调用方法进行链接的实例的正确返回方法是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值