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

Hack语言使用McRouter连接本地Memcached遇类未定义错误求助

解决HackLang中MCRouter类未定义的问题

嘿,刚接触HackLang就遇到这个小坑很正常,我来帮你一步步排查!你碰到的Fatal error: Uncaught Error: Class undefined: MCRouter错误,核心原因是HHVM找不到MCRouter类,主要是下面几个问题导致的:

1. MCRouter扩展未安装或未启用

MCRouter并不是HHVM默认内置的扩展,它需要单独安装并启用:

  • 安装扩展包:
    如果你是通过包管理器安装的HHVM,需要额外安装MCRouter扩展,比如Debian/Ubuntu系统可以运行:
    sudo apt-get install hhvm-mcrouter
    
  • 启用扩展:
    打开HHVM的配置文件(通常是/etc/hhvm/php.ini或/etc/hhvm/hhvm.ini),添加或确认存在以下配置:
    hhvm.extensions[mcrouter] = mcrouter.so
    
    也可以在启动HHVM时临时启用:
    hhvm -m server -v 'hhvm.extensions[mcrouter] = mcrouter.so'
    
    配置完成后记得重启HHVM服务。

2. HHVM版本不兼容

MCRouter类在较旧的HHVM版本中可能不存在,建议确认你的HHVM版本在支持范围内(一般HHVM 3.24及以上版本才稳定支持MCRouter)。可以通过以下命令查看版本:

hhvm --version

如果版本过低,建议升级到最新的稳定版HHVM。

3. 命名空间上下文问题

虽然你已经用了\MCRouter的完全限定名,但如果代码处于自定义命名空间下,还是要留意是否有冲突。不过从你的代码示例来看这个可能性较低,也可以尝试在文件顶部添加:

use MCRouter;

之后直接用MCRouter::createSimple($servers)调用,看是否能解决问题。

修正后的代码示例

确认扩展启用后,你的代码可以调整为更严谨的写法:

<?hh

class MemcacheConnector {
  private static ?MCRouter $mcRouter = null;

  private static function createMemcacheConnection(): void {
    // 避免重复创建连接
    if (self::$mcRouter !== null) {
      return;
    }
    $servers = Vector {"127.0.0.1:11211"};
    self::$mcRouter = \MCRouter::createSimple($servers);
  }
}

最后别忘了确认本地的Memcached服务正在运行,避免后续连接失败哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:47:48