php - 如何声明在 PhpDoc 中定义了一个常量(用于 intelephense)?
问题描述
TL;博士
如何使用 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 显示错误:“未定义的常量 '...\ABSPATH' (1011)”(其中的点是我为简洁起见省略的命名空间)。
所以看起来 intelephense 没有接受第一行暗示的条件——即如果ABSPATH
没有定义,执行将不会到达引用它的后面的代码。(这很好,程序流分析可能要求太多)。无论如何,我认为我应该能够添加某种 PhpDoc(或其他注释注释)以向代码分析器表明该变量已定义。像这样的东西:
/**
* @var string ABSPATH
*/
或这个:
/**
* @global string ABSPATH
*/
但这些都不会导致错误消失。(我也尝试过@const
似乎不是真正的标签。它也不起作用。)
代码中是否有某种方式可以表明 ABSPATH 是在外部代码中定义的,还是在外部范围内定义的?在函数顶部添加一行 likeglobal ABSPATH;
似乎也不正确,因为ABSPATH
它不是变量。这是一个define
-created 常量。
谢谢!
解决方案
与您启用 wp intellisense 的 wordpress 存根类似,您必须为常量创建一个存根文件并将其添加到您的工作区,以便对其进行索引。
<?php
const ABSPATH = '';
推荐阅读
- java - 子节点不会在 start() 上呈现
- json - 在 Mulesoft 数据视图中比较两个数组
- c++ - 如何在 Eigen 中将矩阵与另一个矩阵逐行相乘?
- javascript - 如何在chartjs中绘制多个不同颜色的矩形?
- swift - Swift自动维度单元格高度不起作用
- javascript - 为什么我的多层感知器的输出收敛到 0.5?
- python - 每行前面的循环文本
- php - 请求laravel中的pdf
- visual-studio-code - 尝试在 https://pub.dartlang.org 查找包 ABC 时出现 TLS 错误
- mysql - 选择所有预定义数量的不同值的行