PhpStorm 无法解析包含使用常量的问题

mus*_*n3d 6 php phpstorm

这曾经有效,但最近停止工作了。我认为我的设置没有发生任何变化,但我已经在它们上面倒了几个小时只是为了确定一下。我也检查过谷歌和SO。请先注意细节,然后再声称“这是在这里回答的......”谢谢。:)


假设和要求

假设我们有两个文件:

  • <project_root>/index.php
  • <project_root>/folder/file.php

假设我们的项目根目录是/home/me/project.

我们想要包含index.php 中的file.php。我们希望 PhpStorm 能够解析文件路径并允许我们执行一些漂亮的 IDE 操作,例如“转到声明”。

什么有效

    require 'folder/file.php';

    require '/home/me/project/folder/file.php';

    $root = '/home/me/project/';
    require $root.'folder/file.php';
Run Code Online (Sandbox Code Playgroud)

什么不再有效

    define('ROOT_DIR', "/home/me/project/");
    require ROOT_DIR.'folder/file.php';
Run Code Online (Sandbox Code Playgroud)

PhpStorm确实识别了我鼠标悬停时的值ROOT_DIR,但它突出显示home并显示如下内容:Path '"/home/me...folder/file.php' not found

为什么要使用常量? 为了简单起见,我省略了说明问题所不需要的细节。我想解决的主要问题是为什么它曾经有效但现在不再有效,和/或我怎样才能让它再次工作。


抱歉,帮不上忙。你到底想做什么? 这是我遗漏的细节。如果我们不能解决主要问题,也许我们可以找到一个好的解决办法。

我正在使用现有的代码库。大多数文件需要一个config.php定义root_dir()用于获取 Web/项目根目录的文件。PhpStorm 没有解析这些路径(这是可以理解的),所以我创建了一个常量来代替它。无论如何,这更有意义。

在今天的战斗中,我发现你可以这样做:

    /** @define "root_dir()" "/home/me/project/" */
    // or
    /** @define "ROOT_DIR" "/home/me/project/" */
Run Code Online (Sandbox Code Playgroud)

如果您将其放在文件中的任何位置,那么 PhpStorm 就能够解析该文件中的所有包含/要求。但是,它只在该文件中有效,即使您尝试在另一个文件中包含/需要它。您必须对每个文件执行此操作才能使其在任何地方都能工作。没有。呃呃。不,谢谢。我需要以 PhpStorm 在整个项目中识别的方式引用项目/Web 根目录的绝对路径。

mus*_*n3d 1

@LazyOne 在评论中回答了这个问题。这是最新版本中的一个错误,正在此处跟踪: https: //youtrack.jetbrains.com/issue/WI-31754