【问题标题】:PHP8 fatal error: ($callback) must be a valid callback, non-static methodPHP8 致命错误:($callback) 必须是有效的回调,非静态方法
【发布时间】:2023-02-08 19:45:51
【问题描述】:

我一直在使用一个 WordPress 插件,它是不再维护(现场直播)。我最近将网站更新为 PHP8,但是这个插件,只要它处于活动状态,现在就会导致致命的 WordPress 错误。我宁愿保留插件,即使我必须暂时手动“修补”它。

我相信我可以将错误追溯到这个:

PHP Fatal error:  Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method

我注意到这并没有明确告诉我导致错误的 PHP 代码行 - PHP 错误日志引用的行位于 /wp-includes/class-wp-hook.php、/wp-settings.php 和/wp-load.php 文件,我认为这些文件本身不会直接导致问题。

检查一些插件代码,我注意到它做了以下事情:

function init()
{
    OmAlb_LiveCom_HookHandlers::add_shortcode();
}

像上面这样的代码示例有很多。这会导致致命错误吗?如果是这样,应该如何手动重组代码以防止致命错误?

编辑 - 这是完整的错误:

AH01071:出现错误“PHP 消息:PHP 致命错误:未捕获类型错误:call_user_func_array():参数 #1 ($callback) 必须是有效回调,非静态方法 OmAlb_LiveCom::plugins_loaded() 无法在 /var/ 中静态调用www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php:308
堆栈跟踪:
#0 /var/www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters()<br>n
#1 /var/www/vhosts/<>/httpdocs/wp-includes/plugin.php(517): WP_Hook->do_action()\n
#2 /var/www/vhosts/<>/httpdocs/wp-settings.php(480): do_action()\n
#3 /var/www/vhosts/<>/httpdocs/wp-config.php(101): require_once('...')\n
#4 /var/www/vhosts/<>/httpdocs/wp-load.php(50): require_once('...')\n
#5 /var/www/vhosts/<>/httpdocs/wp-blog-header.php(13): require_once('...')\n
#6 /var/www/vhosts/<>/httpdocs/index.php(17): require('...')\n
#7 {main}\n throw in /var/www/vhosts/<>/httpdocs/wp-includes/class-wp-hook.php on line 308', referer: https://<>/<>`

【问题讨论】:

  • PHP 错误日志引用的行......所以向我们展示错误消息,然后我们就可以看到错误在哪里,我假设堆栈跟踪让你感到困惑
  • “这是导致致命错误的原因吗?”- 不,因为那是一个直接方法调用,call_user_func_array 甚至没有涉及到这一点。
  • 我编辑了问题以显示日志中的完整错误。我试图简明扼要。

标签: php wordpress php-8


【解决方案1】:

您的错误消息表明 OmAlb_LiveCom::plugins_loaded() 被称为静态函数,但未声明为静态。

您可以尝试通过将函数声明从 function plugins_loaded() 更改为 static function plugins_loaded() 来解决此问题。这应该允许将函数作为静态方法调用。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2022-01-22
    • 2021-01-14
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多