call_user_func_array的错误控制操作符

时间:2016-01-28 07:15:50

标签: php function

我使用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引发的错误吗?或不起作用? 如果它不起作用我怎么能抑制它?

4 个答案:

答案 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) );

Demo

答案 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():成功转移......”。