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