2013-12-20 3 views
0

Я использую компонент laravel orm и наблюдал следующее, когда я развернул сервер жизни.Необязательный параметр Использование при реализации интерфейса

я получил ошибку

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

Я развернутого на сервере Ubuntu, который имеет PHP v5.4.6 установлен. Не получилось это, работая на моей локальной машине, на которой установлен php v5.3.5.

Декларация интерфейс, как показано ниже

public function toJson($options = 0); 

в то время как реализация абстрактного класса

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

Я не думаю, что это будет проблемой, так как объявление интерфейса имеет свой параметр, как опция и абстрактный класс реализует его, не требуя параметра.

Это вещь с php v5.4 и какое преимущество она предлагает?

Кроме того, что является лучшим подходом к фиксации этого? Интерфейс реализован множеством классов, поэтому я стараюсь не нарушать зависимости; вы посоветуете понизить мою версию php на сервере life?

+0

Я бы посоветовал фактически реализовать необязательный аргумент. – rmobis

ответ

5

В PHP 5.4 реализация класса должна соответствовать сигнатуре абстрактного или интерфейса.

Интерфейс принимает аргумент $options, в то время как вашей реализации нет. Вероятно, это вызывает ошибку.

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

Просто обновите ваш метод toJson(), чтобы принять $options аргумент.

+10

+1 для использования в то время как – chiliNUT

Смежные вопросы