在最近的一些Eclipse更新和工作区更改之后,我发现在PDT中验证PHP代码时存在一些问题。为我的项目重新添加所有外部库后,每个外部类都是可解析的,但对于像"DateTime"或"异常"这样的 PHP 基类,我得到一个错误/注释"DateTime 无法解析为类型"。PHP 验证版本设置为 7.1,但即使设置更低也会创建错误。
如何解决此验证问题?
这里有很多可能的情况; 我的是一个相当古老的项目,有一个损坏的构建路径配置。但是使用 GUI 我无法修复它。
在 eclipse 关闭时将以下行添加到项目文件夹中的 .buildpath 文件中,然后重新启动 eclipse 可以解决此问题:
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
但是,此外,如果代码使用命名空间,则需要使用 \DateTime 而不是 DateTime,或者,在顶部添加"use DateTime";
(在使用Eclipse PDT深入研究其他问题的评论后找到的解决方案并没有提出所有的php函数和 https://bugs.eclipse.org/bugs/show_bug.cgi?id=502184(
如果项目的根文件夹中没有名为.buildpath的文件,只需创建它即可。
文件的内容应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path=""/>
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>
这会将所有文件夹分配为"源文件夹"。
这在Eclipse Oxygen.3a版本(4.7.3a(中工作正常
@NextThursday提到使用全局作用域在类名前使用"\"。仅当代码的范围已限定在特定命名空间内时,这一点才很重要。
我的有点不同,但对于像我这样的新人来说,这里值得一提。
我只是使用Import
>Projects from Folder or Archive
导入项目.它只是一个文件夹,不多不少。
您必须右键单击导入的文件夹>Configure
>Convert to PHP Project ...
Exception
上的错误消失了。
我最近遇到了类似的情况,一个项目的代码在网络服务器上,服务器宕机了。当它恢复时,坐骑已经改变,所以找不到我的一些外部库。这就是我修复它的方式:
在我的项目属性->php->源路径->包含路径库选项卡中,我添加了外部代码的路径。然后,我在项目上运行了"生成"项目,然后运行"刷新"。警告消失了。
就我而言,我使用的是作曲家,然后,日食可以选择更新构建路径:
作曲家 ->更新构建路径
我遇到了一个新项目无法识别供应商依赖项(来自vendor
文件夹(的问题。 例如,如果我在代码中有:
use PsrLogLoggerAwareInterface
它将用红色下划线标明">进口......无法解析",并且在导入之外,这些类与它们">无法解析为类型"。
然而,我已经.buildpath
到位,但如果仔细观察,您会注意到问题:
<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
<buildpathentry kind="src" path="examples"/>
<buildpathentry kind="src" path="src"/>
<buildpathentry kind="src" path="tests"/>
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>
没错,vendor
文件夹没有条目。添加缺少的条目:
<buildpathentry kind="src" path="tests"/>
+ <buildpathentry kind="src" path="vendor"/>
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
然后清理/构建项目立即解决了问题。
我最近遇到了这个问题,第二天在 Eclipse 2021-06 中重新打开了一个工作项目......
我所做的是禁用所有验证器,从"问题"视图中删除所有错误,然后再次重新启用验证器。然后项目>验证修复了它!
编辑:我看到它创建了新文件:.settings/org.eclipse.wst.validation.prefs
有时我们没有注意到缺少";"或"}"可能会导致此问题。因此,如果问题以前从未在文件中发生过,请检查是否有任何新引入的语法错误。