为什么在PHP 7中无法用static返回类型声明接口(interface)?

假设我有以下类(class):

interface BigNumber {
    /**
     * @param BigNumber $that
     *
     * @return static
     */
    public function plus(BigNumber $that);
}

class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }

我想将plus()方法的返回类型强制为static,即:
  • BigInteger::plus()必须返回BigInteger
  • BigDecimal::plus()必须返回BigDecimal

  • 我可以通过以下方式声明接口(interface):

    public function plus(BigNumber $that) : BigNumber;
    

    但这并不能强制执行以上操作。我想做的是:

    public function plus(BigNumber $that) : static;
    

    但是迄今为止,PHP 7对此并不满意:



    是否有特定原因,还是应该报告此错误?

    最佳答案

    2020年更新

    PHP 8中的静态返回类型will be introduced

    09-10 14:00