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

如何配置Psalm忽略未安装PHP扩展对应的可选类?

解决Psalm报错未安装扩展类的问题

下面几种方法都能搞定这个问题:

  • 用条件判断让Psalm自动识别
    在实例化Memcached这类扩展类之前,先加个class_exists检查,Psalm会读懂这个判断,不再报错。示例代码:

    if (class_exists('Memcached')) {
        $cache = new Memcached();
        // 后续缓存操作
    }
    
  • 修改Psalm配置文件
    编辑项目根目录的psalm.xml,有两种配置方式:

    1. 添加存根类:如果不想动业务代码,自己写个极简的存根文件,比如stubs/Memcached.php,内容如下:
      <?php class Memcached {} ?>
      
      然后在psalm.xml里引入这个存根:
      <stubs>
          <file name="stubs/Memcached.php" />
      </stubs>
      
      另外Psalm本身内置了很多PHP扩展的存根,也可以直接启用对应扩展的存根,比如在<extensions>节点里加上<extension name="memcached" />,本地没装扩展时,Psalm会自动使用内置存根。
    2. 直接忽略特定错误:针对UndefinedClass错误,指定忽略Memcached类的报错,在<issueHandlers>节点里添加:
      <issueHandlers>
          <UndefinedClass>
              <errorLevel type="suppress">
                  <class name="Memcached" />
              </errorLevel>
          </UndefinedClass>
      </issueHandlers>
      
  • 用Psalm注解提示
    如果是在工厂方法里,给方法加个@psalm-if-this-is-class注解,告诉Psalm只有当类存在时才会执行这段代码:

    /**
     * @psalm-if-this-is-class(Memcached)
     */
    public function createMemcachedDriver(): CacheDriverInterface
    {
        return new MemcachedDriver(new Memcached());
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:30:33