繁体   English   中英

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

[英]Optional Parameter Usage while implementing an interface

我在部署生命服务器时使用了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版本吗?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM