2

我正在尝试使用函数handleContact 调用名为ContactController的类,但出现以下错误:call_user_func([ContactController::class, 'handleContact']);

致命错误:未捕获错误:无法静态调用非静态方法 app\controllers\ContactController::handleContact()

<?php
namespace app\controllers;

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

2 回答 2

4

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

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

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

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

PS 将 handleContact 设置为静态将是一个简单的方法。

于 2021-01-09T11:09:44.080 回答
2

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

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

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

但是,如果您的handleContact方法不直接对ContactController实例进行操作(即不使用$this变量),您可以通过static在方法定义中使用关键字将您的方法转换为静态,并且您的原始代码应该可以工作。

于 2021-01-09T11:39:10.993 回答