为什么PhpStorm代码完成不能在这么简单的代码块上工作?
我最近注意到,PhpStorm中的代码完成效率较低,我不确定我的设置是否混乱,或者我只是缺少了一些东西 下面是我尝试做的一个例子:为什么PhpStorm代码完成不能在这么简单的代码块上工作?,php,autocomplete,phpstorm,code-completion,Php,Autocomplete,Phpstorm,Code Completion,我最近注意到,PhpStorm中的代码完成效率较低,我不确定我的设置是否混乱,或者我只是缺少了一些东西 下面是我尝试做的一个例子: class Database { public function doStuff() {} } class DatabaseTest { private $conn; /** * DatabaseTest constructor. * @param $dbc */ public function __
class Database {
public function doStuff() {}
}
class DatabaseTest {
private $conn;
/**
* DatabaseTest constructor.
* @param $dbc
*/
public function __construct($dbc) {
$this->conn = $dbc;
}
public function test() {
$this->conn->
}
}
$dbc = new Database();
$databaseTest = new DatabaseTest($dbc);
这里的问题是测试函数中的代码完成将无法正常工作
PhpStorm不会将类型添加到构造函数自动生成的docblock中,即使它应该能够推断类型
即使docblock不正确或参数没有提示类型,PhpStorm是否应该能够根据发送的参数确定对象类型
我意识到,如果我键入hint构造函数参数或doc块,我将得到预期的结果,但我觉得PhpStorm应该能够找到这个结果
我正在使用PhpStorm 2018.1.6
我确信我忽略了一些东西,并提前感谢您的帮助。在这种情况下,PHPStorm不能自动完成的原因是,考虑到您的代码以及构造函数中没有类型提示/typed@param,可能有几个数据库实例中$this->conn的类型不同 让我们假设您在示例代码的末尾添加了以下内容:
$dummy = new \stdClass;
$databaseTest2 = new DatabaseTest($dummy);
现在PHPStorm应该在类as中自动完成$this->conn什么?它可以是一个数据库实例或\stdClass,也可以是其他任何类型
< P>编辑:好的,从技术上讲,它可以解析所有构造函数调用,并将其视为数据库“sdBaseType……其他类”,但之后它还必须检查所有$THE-CONN赋值,因为它可以是任何类型的…如果代码太多,那么不提CPU时间就值得了。您应该在@param指令中包含该类。比如:@param FeedServlet$servlet,其中FeedServlet是参数$servlet的类。因此,在您的案例中,@param Database$dbc使用文档注释解决方案。