我正在使用VScode (v1.56) 开发一个PHP (v7.0.33) 项目。最近我安装了VSCode的扩展Intelephense (v1.7.1) 并开始根据Intelephense建议清理我的代码。
我的项目中一组类具有以下结构(函数名称不是真实的,但只是为了让您看到每个子类都有一些从超类重写的函数(带有前缀baseFunction
)以及该子类特定的新函数(带有类首字母缩写,如fdmSpecificFunction
):
根据图表,每个DocumentSaver都有一个DocumentManager实例。
例如创建FatturaVenditaDocumentSaver
实例的代码是:
$documentManager = new FatturaVenditaDocumentManager();
$documentSaver = new FatturaVenditaDocumentSaver($documentManager);
$documentSaver->baseFunction1();
考虑以下代码,位于 FatturaVenditaDocumentSaver
中:
public function baseFunction1() {
parent::baseFunction1();
$this->documentManager->fvdmSpecificFunction1();
}
这是一个常见的OOP实现,使用多态和动态绑定:创建了一个
FatturaVenditaDocumentSaver
实例,并从FatturaVenditaDocumentManager
实例化文档管理器。调用$documentSaver->baseFunction1()
将执行FatturaVenditaDocumentSaver
中实现的代码,其中会正确执行FatturaVenditaDocumentManager
中实现的fvdmSpecificFunction1()
。问题在于Intelephense会给出错误提示“Undefined method 'fvdmSpecificFunction1'. Intelephense (1013)”,因为
BaseDocumentManager
中未定义fvdmSpecificFunction1
。有没有办法让Intelephense理解我的代码的真正实现(考虑到Intelephense解析我所有的PHP代码)?我不想禁用Intelliphense的“undefined method”检查,也不想在
BaseDocumentManager
中添加空的fvdmSpecificFunction1
,因为这与项目逻辑不一致。非常感谢您的帮助。
@param
定义中指定该接口。 - Ma3x