TL; DR
Как документировать константу, определенную во внешнем коде, с использованием PhpDoc / DocBlocks, чтобы она не отображалась как неопределенная переменная при анализе кода stati c?
Подробности:
Я пытаюсь написать небольшой плагин для 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). У меня установлены все необходимые зависимости, включая перечисление «wordpress» в качестве заглушки в настройках VSCode. В целом, intelephense работает довольно хорошо и отлично показывает информацию о моем коде, а также код библиотеки WordPress.
Однако intelephense выдает ошибку: "Undefined constant" ... \ ABSPATH '(1011) " (где точки - это пространство имен, которое я для краткости опускаю).
Похоже, что intelephense не принимает условие, подразумеваемое первой строкой - а именно: если ABSPATH
не определено, выполнение не достигнет более позднего кода, который ссылается на него. (Что совершенно нормально, анализ программного потока может потребовать слишком много). В любом случае, я думаю, что я должен иметь возможность добавить какой-нибудь PhpDo c (или другую закомментированную аннотацию), чтобы указать анализаторам кода, что переменная определена . Примерно так:
/**
* @var string ABSPATH
*/
или вот так:
/**
* @global string ABSPATH
*/
Но ни один из них не вызывает ошибку на go. (Я также попробовал @const
, который не является реальным тегом. Он тоже не работал.)
Есть ли какой-то способ в коде, который я могу указать, что ABSPATH определен во внешнем коде или в выходной области? Добавление строки в верхней части функции, такой как global ABSPATH;
, также кажется неправильным, потому что ABSPATH
не является переменной. Это define
-созданная константа.
Спасибо!