如何覆盖php中的json_encode()功能

时间:2017-12-14 10:44:50

标签: php json

我使用php编程创建了总api,用于我使用的输出

json_encode($arr),

现在我想将输出打印为漂亮的打印格式 在浏览器中不使用JSON Viewer扩展..

我已经使用json_encode($ arr)完成了400多个webservices输出,但我不想改为

 echo json_encode($arr, JSON_PRETTY_PRINT);

我只想要如何覆盖默认的json_encode()预定义功能,以满足我的需求..

3 个答案:

答案 0 :(得分:3)

通过使用提供runkitrunkit_function_redefine()提供apd的{​​{1}}等扩展程序,有一些方法可以做到这一点。

如果我是你,我只需找到/替换override_function()来电,添加json_encode()

答案 1 :(得分:2)

另一个没有重新定义json_encode函数的解决方案,你也可以简单地注册一个输出处理程序,它读取打印的json并再次打印出来。

ob_start(function($json) {
    return json_encode(json_decode($json), JSON_PRETTY_PRINT);
});

这个解决方案的好处是,你不需要任何php扩展(因为runkit目前在PHP 7中不起作用)

答案 2 :(得分:2)

您可以像这样使用override_function

rename_function('json_encode', 'original_json_encode');
override_function('json_encode', '$value, $options = 128, $depth = 512', 'return original_json_encode($value, $options, $depth);');

通过这种方式,你可以使用原始的一个来获得结果,覆盖默认选项(128是JSON_PRETTY_PRINT的值),你可以像以前一样使用json_encode