📅  最后修改于: 2023-12-03 15:05:43.035000             🧑  作者: Mango
这个错误通常出现在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 内置函数时等等。如果遇到这个问题,我们通常需要仔细检查代码,找出不当的调用方式,并进行修改。