如何告诉 eclipse php linter 变量存在?

编辑:我从 Eclipse 版本 4.12.0 和 PDT 版本 6.2.0.201812112302 更新到 Eclipse 版本 4.13.0M3(预发布)和 PDT 版本 6.3.0.201908130957(预发布),我无法再重现该问题预发布版本,现在正在/** @var variableType $variableName */消除错误 - 在实际发布之前我不会肯定地说,但我很确定这只是一个错误。(已在开发中修复但尚未发布)


我有这个非常简单的代码:


<?php

declare(strict_types = 1);

namespace vaporfs;


/** @var array $config */

$config["db"]["dsn"] = "mysql:host=127.0.0.1;port=3306;dbname=vaporfs;charset=utf8mb4";

$config["db"]["username"] = "vaporfs";

$config["db"]["password"] = "ffaXIgcDAmXkB5iJXG";

仅此而已。并且 eclipse linter 在尝试使用它之前抱怨 $config 不存在:

http://img3.mukewang.com/61c52fdf0001f93607650196.jpg

我如何告诉 eclipse linter 变量 $config 确实存在?

(我真的认为答案是/** @var array $config */,但显然不是。或者我做对了,但它可能是 linter 中的一个错误?)


婷婷同学_
浏览 133回答 2
2回答

交互式爱情

/**&nbsp;@var&nbsp;array&nbsp;$config&nbsp;*/是完全正确的。即将推出的 PDT 6.3 已经支持这一点。

饮歌长啸

您将未定义的变量视为数组。linter 给你一个警告,它是绝对正确的。但这并不意味着代码将不起作用。它只是警告您它可能有问题。注释在这里没有帮助。变量在您分配给它的那一刻就是数组,就好像它是一个数组一样,因此注释没有告诉任何新内容。您是否将此文件包含在另一个文件中,该文件在包含 config.php 的范围内定义了变量是无关紧要的,因为 linter 会单独处理该文件。您也可以从未定义变量的上下文中包含文件,但这是 linter 无法访问的。因此 linter 更愿意警告您,因为它认为可以将文件包含在未定义变量的范围内。这一切都归结为您在全局范围内编写代码的事实,因此它具有副作用。当您包含更多此类文件时,全局范围将混合在一起,混合方式将取决于包含的顺序。您的选择是:1) 确保它在 config.php 中定义$config = [];//the rest of your code here或者if (!isset($config)) {&nbsp; $config = [];}// rest of your code here但是您可能还想检查它是否是数组,否则抛出异常。2)从具有副作用的全局范围中删除代码,将其移至函数:function createConfig(array $config = []) {&nbsp; // your code comes here&nbsp; return $config;}3)接受这样一个事实,即您确定以正确的方式包含它,并且 linter 警告您可能发生的事情,但您确定它没有发生。IMO 你能做的最好的事情是选项 2 - 避免全局范围的副作用。
打开App,查看更多内容
随时随地看视频慕课网APP