gpt4 book ai didi

php - VSCode 扩展 Intelephense 给出错误 "Undefined method ' xxx'。 Intelephense (1013)”具有多态性和动态绑定(bind)

转载 作者:行者123 更新时间:2023-12-05 03:42:00 30 4
gpt4 key购买 nike

我正在使用 VScode (v1.56) 开发一个 PHP (v7.0.33) 项目。我最近安装了 VSCode 的扩展 Intelephense (v1.7.1) 并开始按照 Intelephense 的建议清理我的代码。

我的项目中的一组类具有以下结构(函数名称不是真实的,只是为了让您看到对于每个子类,我都有一些从父类(super class)中覆盖的函数(那些具有前缀 baseFunction) 和特定于该子类的新函数(类首字母缩略词如 fdmSpecificFunction):

enter image description here

根据该图,每个 DocumentSaver 都有一个 DocumentManager 的实例。例如,我创建 FatturaVenditaDocumentSaver 实例的代码是

$documentManager = new FatturaVenditaDocumentManager();
$documentSaver = new FatturaVenditaDocumentSaver($documentManager);
$documentSaver->baseFunction1();

考虑 FatturaVenditaDocumentSaver 中的以下代码:

public function baseFunction1() {
parent::baseFunction1();
$this->documentManager->fvdmSpecificFunction1();
}

这是 OOP 中的常见实现,使用多态性和动态绑定(bind):使用从 FatturaVenditaDocumentManager 实例化的文档管理器创建了 FatturaVenditaDocumentSaver 的实例,调用 $documentSaver->baseFunction1() 将执行 FatturaVenditaDocumentSaver 中实现的代码,并在其中正确执行 fvdmSpecificFunction1() 中实现的代码 >FatturaVenditaDocumentManager.

问题是 Intelephense,因为 fvdmSpecificFunction 没有在 BaseDocumentManager 中定义,给我错误“Undefined method 'fvdmSpecificFunction1'.Intelephense (1013)”。

有没有办法让Intelephense理解我代码的真正实现(考虑到Intelephense解析了我所有的PHP代码)?我想避免禁用 Intelliphense 的“未定义方法”检查,并且我不想在 BaseDocumentManager 中添加一个空的 fvdmSpecificFunction1,因为这与项目的逻辑不一致.

预先感谢您的帮助。

最佳答案

已找到解决方案!

我只需在 class block 之前添加 @property 提示,指定对象 $documentManager 的类型。

/**
* @property FatturaVenditaDocumentManager $documentManager
*/
class FatturaVenditaSaver extends FatturaSaver {
public function baseFunction1() {
parent::baseFunction1();
$this->documentManager->fvdmSpecificFunction1();
}
}

通过这种方式,Intelephense 了解与该对象相关的真实类。

关于php - VSCode 扩展 Intelephense 给出错误 "Undefined method ' xxx'。 Intelephense (1013)”具有多态性和动态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67472883/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com