📌  相关文章
📜  Uncaught TypeError: call_user_func(): Argument #1 ($callback) must be an valid callback, non-static method app\controllers\ProductController::update() 不能被静态调用 (1)

📅  最后修改于: 2023-12-03 15:05:43.035000             🧑  作者: Mango

Uncaught TypeError: call_user_func(): Argument #1 ($callback) must be an valid callback, non-static method app\controllers\ProductController::update() 不能被静态调用

这个错误通常出现在PHP项目中,一般是因为我们在调用一个非静态方法时使用了静态方式调用。

举个例子,假设我们有一个名为 ProductController 的类,其中有一个名为 update 的非静态方法:

class ProductController {
    public function update() {
        // ...
    }
}

如果我们尝试通过以下方式调用这个方法:

call_user_func([ProductController::class, 'update']);

就会报上述错误:

Uncaught TypeError: call_user_func(): Argument #1 ($callback) must be an valid callback, non-static method app\controllers\ProductController::update() 不能被静态调用

这是因为我们使用了类名来调用 update 方法,而 update 方法是个非静态方法,它必须通过对象来访问。

为了解决这个问题,我们可以创建一个 ProductController 的实例,然后通过该实例调用 update 方法:

$controller = new ProductController();
call_user_func([$controller, 'update']);

这样就不会报错了。

在实际项目中,这个错误可能会出现在很多不同的情况下,比如在调用回调函数时、在使用 PHP 内置函数时等等。如果遇到这个问题,我们通常需要仔细检查代码,找出不当的调用方式,并进行修改。