2015-03-19 102 views
1

当我requireinclude PHPStorm中的文件时,它无法检测到主文件中定义的变量正在被需要/包含的文件中使用。与包含/必需文件中的变量相同,它显示为未定义。如何设置PHPStorm检查所需/包含文件中的变量用法?如何检查必需/包含文件中的变量定义?

下面是清晰的例子:

主文件(假设main.php):

<?php 
$var1 = "hi"; 
require "next.php"; 

虽然这里是 “必需的” next.php文件:

<?php 
echo "<p>".$var1."</p>"; 

的代码工作正常但在PHPStorm上,$var1main.php文件中显示为未使用,但在中显示为未定义文件。

我见过几个关于如何禁用警告的答案,但这不是我想要的。我希望PHPStorm分别识别被调用模块和调用模块中使用和定义的变量。

这可能吗?或者我问错误的问题?

如果有人想知道为什么我这样做,我试图从结构ala-MVC中分离逻辑。

回答

4

问题是,只看next.php本身,该变量是明确未定义的。不能保证如何执行next.php。您不能将文件限制为仅在从其他文件包含时执行。你可以自己执行这个文件,在这种情况下它会失败。或者你可以从无限多的其他文件中设置这个变量,在这种情况下它会失败。

这就是为什么PhpStorm唠叨你这个未定义的变量。它错误的编码风格,因为它可以在任何情况下失败。

+0

好的明白了你的意思,但这是否意味着我们应该避免MVC? – Paolo 2015-08-14 05:02:53

+0

MVC不排除适当的变量传递。如果你把所有的东西都写成带有明确参数的函数或类,并且使用一个模板化的系统来分离变量(例如Twig)或者你至少使用PhpStorm的必要注释,它就不会抱怨。 – deceze 2015-08-14 05:39:37

+0

我明白了。我会接受这个答案。 – Paolo 2015-08-14 06:37:01

0

有很多问题为什么默认情况下没有在PhpStorm中实现。 我只能建议你为你的项目创建自定义插件,我可以帮你做到这一点。

您可以使用自定义goto插件查看视频。这与你的问题有关。在视图文件中导航到控制器文件中定义的变量。 https://www.youtube.com/watch?v=bVy2MJGJ6LM

+0

我想你是说,而不是遵循常规的MVC风格,我们应该使用类而不是? – Paolo 2015-08-14 05:05:25