duandong1963 2013-12-20 19:06
浏览 130

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

I am making use of the laravel orm component and observed the following when i deployed the life server.

i got the error

Declaration of Illuminate\Database\Eloquent\Collection::toJson() 
must be compatible 
with Illuminate\Support\Contracts\JsonableInterface::toJson($options = 0) 

I deployed on an ubuntu server that has php v5.4.6 installed. Didnt get this while working on my local machine that has php v5.3.5 installed.

The interface declaration is as below

public function toJson($options = 0);

while the abstract class implementation is

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

I didnt think this would be a problem since the interface declaration has its parameter as optional and the abstract class implements it without requiring the parameter.

Is this a thing with php v5.4 and what advantage does it offer?

Also, what is the best approach to fixing this? The interface is implemented by a lot of classes so I am trying not to break dependencies; will you advice downgrading my php version on the life server?

  • 写回答

1条回答 默认 最新

  • dpzp5127 2013-12-20 19:16
    关注

    In PHP 5.4 a class implementation must match the signature of the abstract or interface.

    The interface accepts an argument $options, whilst your implementation does not. This is likely causing the error.

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

    Just update your toJson() method to accept the $options argument.

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算