You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8中使用call_user_func调用非静态方法触发致命错误的问题咨询

解决Non-static method cannot be called statically错误

这个错误原因很直白:你尝试用静态方式调用一个非静态方法,但ContactController里的handleContact()并没有被声明为静态方法,PHP不允许这种操作。下面给你两种可行的解决办法:

方法一:将方法改为静态方法

如果你不需要依赖ContactController的实例属性(比如类里没有需要初始化的成员变量),最简单的方式就是把handleContact()声明为静态方法:

<?php 
namespace app\controllers; 

class ContactController { 
    // 添加static关键字,将方法改为静态
    public static function handleContact() { 
        return 'Hello World'; 
    } 
}

修改后,你原来的call_user_func([ContactController::class, 'handleContact']);就能正常运行了——现在方法属于类本身,支持静态调用。

方法二:实例化控制器后调用非静态方法

如果这个方法需要依赖类的实例(比如后续要用到类里的私有成员、构造函数初始化的变量),那你得先创建ContactController的实例,再通过实例调用方法:

// 实例化控制器对象
$controller = new \app\controllers\ContactController();

// 使用call_user_func调用实例方法
$result = call_user_func([$controller, 'handleContact']);
echo $result; // 输出Hello World

// 或者直接调用(如果不需要使用call_user_func的动态调用特性)
echo $controller->handleContact();

简单总结下:PHP里非静态方法必须绑定到类的实例上调用,静态方法则属于类本身,可以直接通过类名调用。你的代码混淆了这两种调用方式,所以触发了致命错误。

内容的提问来源于stack exchange,提问作者Nanog000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:18:12