Pull to refresh

Comments 11

В коде патча ничего не понял, но предполагаю что он завалится на вот этом тесте:


class Foo implements JsonSerializable {
  public function jsonSerialize() {
    return new Bar;
  }
}
class Bar implements JsonSerializable {
  public function jsonSerialize() {
    return new Foo;
  }
}

Или даже вот таком:


class Foo implements JsonSerializable
{
    public function jsonSerialize() {
        return [this];
    }
}

Не понял как ваш комментарий относится к теме статьи…
Segfault же.…

В комментарии к PR совершенно верно заявили что это не баг а фича, главная же проблема это переполнение стека.
Основной баг как раз в вашем рнр коде, как вы сами и написали рекурсивный вызов, который и так очевиден, без анализа исходников.
По хорошему метод jsonSerialize должен возвращать строку, а не новый экземпляр какого-то объекта и не массив как тут некоторые предлагают :)
Забавно, что на винхп на рнр версии 5.2.4 нет никаких segfault, а на экране печатается
string(2) "{}"

Правда класс объявлен без
implements JsonSerializable
т.к. моя сбока рнр не знает о существовании JsonSerializable интерфейса.
Но в целом вы получили разносторонний опыт…
JsonSerializable появился в 5.4.
> Забавно, что на винхп на рнр версии 5.2.4 нет никаких segfault, а на экране печатается
Да ничего забавного. Так вы не реализуете интерфейс, указанная функция просто не вызывается.
Sign up to leave a comment.