实现接口时的可选参数用法



我正在使用 laravel orm 组件,并在部署生活服务器时观察到以下内容。

我收到错误

Declaration of IlluminateDatabaseEloquentCollection::toJson() 
must be compatible 
with IlluminateSupportContractsJsonableInterface::toJson($options = 0) 

我部署在安装了 php v5.4.6 的 ubuntu 服务器上。在安装了 php v5.3.5 的本地机器上工作时没有得到这个。

接口声明如下

public function toJson($options = 0);

而抽象类实现是

public function toJson()
{
    return json_encode($this->toArray());
}

我认为这不是一个问题,因为接口声明将其参数作为可选参数,并且抽象类在不需要参数的情况下实现它。

这是php v5.4的事情吗,它提供了什么优势?

另外,解决此问题的最佳方法是什么?该接口由许多类实现,因此我尽量不破坏依赖项;你会建议在生活服务器上降级我的PHP版本吗?

在 PHP 5.4 中,类实现必须与抽象或接口的签名匹配。

接口接受参数$options,而您的实现不接受。这可能会导致错误。

http://www.php.net/manual/en/language.oop5.abstract.php

只需更新您的 toJson() 方法即可接受 $options 参数。

最新更新