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

时间:2013-12-20 19:06:34

标签: php interface laravel

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

我收到了错误

Declaration of Illuminate\Database\Eloquent\Collection::toJson() 
must be compatible 
with Illuminate\Support\Contracts\JsonableInterface::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版本吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

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