我使用json_encode
函数调用call_user_func_array
函数。
这是我的代码
call_user_func_array( 'json_encode', $data );
我想抑制json_encode
引发的警告错误,所以我将抑制运算符放在call_user_func_array
这样的前面
@call_user_func_array( 'json_encode', $data );
我的问题是它会抑制json_encode
引发的错误吗?或不起作用?
如果它不起作用我怎么能抑制它?
答案 0 :(得分:0)
我建议暂时禁止警告(也许是NOTICES),但是要显示所有其他消息。像这样:
$save_erep = error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
$result = call_user_func_array( 'json_encode', array($data) );
error_reporting($save_erep);
哦,看看数组($ data)构造。无论如何,它可能会抑制警告。
答案 1 :(得分:0)
如果您在call_user_func_array
中传递第二个参数,如
call_user_func_array( 'json_encode', $data );//assuming the second parameter to be array
然后它会发出警告
警告:json_encode()期望参数2为整数,
中给出的数组
所以为了让它在不抑制错误的情况下工作,你需要像
一样使用它call_user_func_array( 'json_encode', array(&$data) );
答案 2 :(得分:0)
您需要使用call_user_func()
call_user_func('json_encode', $data);
因为call_user_func_array()将每个元素透明为参数函数,例如:
$data = array(1,2);
call_user_func_array('json_encode',$data); // equivalent json_encode(1,2);
答案 3 :(得分:0)
是。那会有用。你可以这样测试:
这会产生警告:
trigger_error('test', E_USER_WARNING);
这会产生警告:
call_user_func_array('trigger_error', ['test', E_USER_WARNING]);
这不会产生警告:
@trigger_error('test', E_USER_WARNING);
这不会产生警告:
@call_user_func_array('trigger_error', ['test', E_USER_WARNING]);
防止警告而不是抑制警告显然更好。我用这个解决方案来抑制无用的警告“警告:ftp_fput():成功转移......”。