如何配置Psalm忽略未安装PHP扩展对应的可选类?
解决Psalm报错未安装扩展类的问题
下面几种方法都能搞定这个问题:
用条件判断让Psalm自动识别
在实例化Memcached这类扩展类之前,先加个class_exists检查,Psalm会读懂这个判断,不再报错。示例代码:if (class_exists('Memcached')) { $cache = new Memcached(); // 后续缓存操作 }修改Psalm配置文件
编辑项目根目录的psalm.xml,有两种配置方式:- 添加存根类:如果不想动业务代码,自己写个极简的存根文件,比如
stubs/Memcached.php,内容如下:
然后在<?php class Memcached {} ?>psalm.xml里引入这个存根:
另外Psalm本身内置了很多PHP扩展的存根,也可以直接启用对应扩展的存根,比如在<stubs> <file name="stubs/Memcached.php" /> </stubs><extensions>节点里加上<extension name="memcached" />,本地没装扩展时,Psalm会自动使用内置存根。 - 直接忽略特定错误:针对
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
相关产品推荐
相关产品推荐

