如果类包含在条件语句中,则PhpStorm未定义对象

时间:2017-03-16 15:09:07

标签: php phpstorm

JetBrains如果将变量包含在条件语句中,则它不会将变量检测为类的对象。例如,这是我的文件:

的config.php:

if( in_array('DATABASE', $include) ){
        require_once( 'database/Database.class.php' );
        $db = new Database();
}

的index.php

$include = ['DATABASE'];
require_once('config.php');
$db...  //<< Here $db is undefined

如果我在config.php文件中包含数据库类而不检查条件,那么它就可以了,我可以使用$db作为Database类的实例。

我还尝试在检查器中取消选中Ignore 'include' and 'require' statements.,但它只是忽略未定义的变量,$db没有被检测为对象,所以我无法看到它的方法和属性。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

不确定$db究竟是什么因为是在if语句中定义的。如果DATABASE在$ include数组中,那么直到运行时才会知道,所以$ db可能会也可能根本没有定义。

您可以使用PHPDoc注释来改变它,而不是提示类型。在index.php的顶部添加如下内容:

<?
/**
 * @var Database $dba
 */

答案 1 :(得分:0)

在声明$ include = ['DATABASE']后,您确定包含config.php; ?好像你没有。