在Symfony中使用json_decode vs JsonDecode

时间:2018-01-19 03:51:03

标签: php symfony encoder

我是Symfony应用程序开发世界的新手。我目前正在 Symfony 2.8 工作,我经常发现我的同事之间关于使用通用PHP函数的争论,例如 json_decode或json_encode vs Symfony自己的JsonDecode和JsonEncode 。我经常被告知不要使用json_encode或json_decode,而是使用Symfony提供的编码器类,即JsonEncode和JsonDecode来实现相同的功能。 我很想知道,

  • 放弃使用这些通用函数来支持Symfony编码器类是否真的那么重要?

  • 以任何方式对性能有帮助吗?

  • 这些建议只是更好的编码策略的一部分,还是有任何缺点,比如在代码中使用json_encode?

我真的很想知道这种炒作的背后是什么,欢迎任何帮助。

提前致谢!

2 个答案:

答案 0 :(得分:1)

1)我想,因为在Symfony文档的Symfony Best Practices部分中没有涉及这个主题的词 - 不,这种功能的使用不是强制性的 - 您可以选择更适合您的方式,但是它可以使您的代码更可持续地更改您使用的PHP版本,您将在回答下一个问题时看到它。

2)不,它没有 - 它只是json_decode和json_encode的包装器,并提供了一些额外的工具。在JsonDecoder的情况下,它将Json Decoder的默认选项与上下文合并,传递给函数并解析php版本之间的json_decode签名。

3)我认为使用json_decode的唯一缺点是需要在代码的每个地方更改传递给它的参数集,如果你在PHP版本> = 5.4中使用它有四个参数并且你突然决定将项目上的PHP版本更改为< 5.4,但与json_encode没有任何相似之处。对我而言,它只是更好的编码策略的一部分,只不过是为Symfony项目贡献团队提供简便快捷的工作。

答案 1 :(得分:1)

如果你真的取得了相同的结果,那么最好不要使用PHP的原生unsigned。因为它需要与Symfony Serializer Component合作才能利用Symfony的编码器。但是,您可以create your own encoder使用Symfony的Serializer。

  

以任何方式对表现有帮助吗?

没有。它增加了开销,因为它基本上增加了额外的功能并将其包装在PHP的本地json_decode中。 Link to current code.

  

放弃使用这种通用产品真的很重要吗?   是否支持Symfony编码器类?

简短回答是否定的,但真正的答案更为复杂。 Symfony的编码器类在使用实体时具有一些优势,在较新版本的Symfony中尤其如此。如果您将项目设置为使用Symfony Serializer Component,那么它可能是值得的。如果你write your own encoder,那就更好了。

  

这些建议只是更好的编码策略的一部分还是   使用时有什么缺点,比如说代码中的json_encode吗?

缺点是您可能需要编写更多代码来反序列化您的对象以匹配您的实体。好处是代码不会与Symfony耦合,如果需要更容易移植。