简述
如何使用PhpDoc/DocBlocks文档注释来记录外部代码定义的常量,以避免其作为未定义变量出现在静态代码分析中?
详细信息:
我正在尝试编写一个小型WordPress插件。我有一些以下类似的PHP代码。
defined('ABSPATH') or die('Access denied!'); // Avoid direct file request
function getPluginInfo($key) {
require_once ABSPATH . '/wp-admin/includes/plugin.php';
$data = get_plugin_data(MY_PLUGIN_FILE, true, false);
return $data[$key];
}
我正在使用 VSCode 插件 vscode-intelephense(提供了一个 PHP 语言服务)。我已经安装了所有必要的依赖项,包括在 VSCode 设置中将 "wordpress" 列为存根。总的来说,Intelephense 工作得非常好,并且在显示有关我的代码以及 WordPress 库代码的信息方面做得非常好。
然而,Intelephense 显示一个错误:"Undefined constant '...\ABSPATH' (1011)"(其中点是我为简洁起见省略的命名空间)。
因此,看起来 Intelephense 没有注意到第一行所暗示的条件 - 即如果未定义 `ABSPATH`,则不会执行后面引用它的代码。 (这完全可以接受,程序流分析可能要求太高)。无论如何,我认为我应该能够添加某种类型的 PhpDoc(或另一种被注释的注释)来指示代码分析器变量已被定义。像这样:
/**
* @var string ABSPATH
*/
或者这样:
/**
* @global string ABSPATH
*/
但是这些方法都不能消除错误。(我还尝试了
@const
,但似乎它不是一个真正的标签。它也没有起作用。)在代码中是否有一种方式可以表明 ABSPATH 是在外部代码或外部范围中定义的?在函数顶部添加像
global ABSPATH;
这样的行似乎也不正确,因为 ABSPATH 不是一个变量,而是通过 define
创建的常量。谢谢!