在 PHP 中使用 call_user_func 8 returns 致命错误
use call_user_func in PHP 8 returns fatal error
我正在尝试使用函数 handleContact 和 call_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
方法定义中的关键字和您的原始代码应该有效。
我正在尝试使用函数 handleContact 和 call_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
方法定义中的关键字和您的原始代码应该有效。