在 PHP 中使用 call_user_func 8 returns 致命错误

use call_user_func in PHP 8 returns fatal error

我正在尝试使用函数 handleContactcall_user_func([ContactController::class, 'handleContact']); 调用名为 ContactController 的 class,但是得到了以下错误:

Fatal error: Uncaught Error: Non-static method app\controllers\ContactController::handleContact() cannot be called statically

<?php
namespace app\controllers;

class ContactController {
    public function handleContact() {
        return 'Hello World';
    }
}

如果方法 handleContact 是静态的而不是调用它:

call_user_func([ContactController::class, 'handleContact'])

如果您的方法 handleContact 不是静态的,那么您需要传递实例化的 class 例如

$contactController = new ContactController();
call_user_func([$contactController, 'handleContact'])

P.S。将 handleContact 设置为 static 将是简单的出路。

由于 handleContact 不是静态方法,您应该先实例化 ContactController,然后在创建的实例上调用函数。

你甚至不需要在现代 PHP 中使用丑陋的 call_user_func(),因为你可以直接通过 ().

调用回调
  $controller = new ContactController();
  [$controller, 'handleContact']();

但是,如果您的 handleContact 方法不直接在 ContactController 实例上运行(即不使用 $this 变量),您可以使用static 方法定义中的关键字和您的原始代码应该有效。