今天在开发511yj主题时,打开后台发现了错误提示“Warning: call_user_func_array() expects parameter 1 to be a valid callback,”
百度了了一下,先将原因和方法总结如下:
1、 测试环境
wordpress4.7
Php7.01
2、产生背景
在添加wp评论插入emoji表情时,在functions.php中修改了原路径,当评论插入表情时,后台显示以上错误。
3、原因分析
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'importFile' not found or invalid function name in /....../wp-includes/plugin.php on line 395
(1)无效返回值 importFile函数没有找到
(2)动态方法调用
call_user_func
namespace Foo; class F { public function showAge ($age) { return $age + 100; } } call_user_func(__NAMESPACE__ . '\F::showAge',23);
call_user_func()
expects parameter 1 to be a valid callback, non-static method Foo\F::showAge() should not be called statically
解释一下: 这个函数的第一个参数必须是 有效的回调函数, 非静态的方法showAge() 是不允许调用的.
需要的解决方案是:
namespace Foo; class F { public static function showName ($name) { return strtoupper($name); } public function showAge ($age) { return $age + 100; } } $f = new F(); echo call_user_func(array($f, 'showAge'),23);
对于这样的动态函数的调用,必须提前进行对象实例化,
然后将实例化之后的对象传入函数作为第一个参数.
call_user_func_array :
namespace Foo; class F { public static function showName ($name) { return strtoupper($name); } public function showAge ($age) { return $age + 100; } } $f = new F(); echo call_user_func_array(array($f, 'showAge'),array(23));
记住一点,call_user_func_array 传递的第二个参数必须是数组,
call_user_func 传递的第二个参数可能是数组.如果是多个参数的话,还是需要以列表的形式列出.
(3)我们不能修改原文件,采用下策:
屏蔽:php升级到5.4以后导致解决的办法就是在 php的配置文件php.ini中找到display_errors = Off(把on 改为Off)
(4)wordpress 中可以使用 @ini_set('display_errors','Off')
;关掉错误输出。