php返回提示,PHP 7接口,返回类型提示和自我

我在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、付费专栏及课程。

余额充值