【发布时间】:2021-08-01 00:01:51
【问题描述】:
我正在使用 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 中的一个常见实现,使用多态性和动态绑定:使用从 FatturaVenditaDocumentManager 实例化的文档管理器创建了 FatturaVenditaDocumentSaver 的实例,调用 $documentSaver->baseFunction1() 将执行在 FatturaVenditaDocumentSaver 中实现的代码和,在里面,会正确执行fvdmSpecificFunction1()里面在FatturaVenditaDocumentManager中实现的代码。
问题在于 Intelephense,因为 fvdmSpecificFunction 没有在 BaseDocumentManager 中定义,所以给我错误“未定义的方法 'fvdmSpecificFunction1'。Intelephense (1013)”。
有没有办法让 Intelephense 了解我的代码的真正实现(考虑到 Intelephense 会解析我所有的 PHP 代码)?我想避免禁用 Intelliphense 的“未定义方法”检查,我不想在 BaseDocumentManager 中添加一个空的 fvdmSpecificFunction1,因为这与项目的逻辑不一致。
提前感谢您的帮助。
【问题讨论】:
标签: php visual-studio-code vscode-extensions intelephense