PHPStorm"实例化时的类成员访问" PHPDoc的

时间:2014-11-10 11:39:34

标签: php phpstorm phpdoc

首先注意:请注意,这里不是编码问题,这是我在IDE PhpStorm中遇到的问题

我的项目中有一个Model类,其方法load基本上从数据库中加载了一些东西。然后我有多个扩展模型的类(其他模型),例如

User extends Model
Book extends Model

现在,使用5.4添加的功能来在瞬时访问类库我遇到了一些来自phpstorm的Code Inspector的问题。

在用户类中,我有一个方法“getUrl()”。我称之为

$user = new User();
$user->load(1);
$user->getUrl();

我没有收到任何警告。 Phpstorm知道$ user是一个User对象,并没有发出警告。

但是,当我宣布这样的时候

$user = (new User())->load(1);
$user->getUrl();

我收到警告Method 'getUrl()' not found in class Model。我可以通过将getUrl方法添加到模型中来轻松解决此问题,但是只有3-4个类(15个)使用getUrl方法。有没有办法告诉他$ user是User对象而不是Model对象?

我知道我可以添加

/ ** @var用户$ user * /

在代码之前

,但我希望这是自动的,而不是我必须一直重新生成它。

基本上问题是

User类有一个名为getUrl的方法 在即时功能上调用具有类成员访问权限的类会发出警告,因为PHPStorm认为它是Model类的对象而不是用户的对象

1 个答案:

答案 0 :(得分:0)

这应该通过将docblock添加到load()方法来解决。

问题是,在您的第二个示例中$user不是new User()的结果,而是->load()调用的结果,看起来PHPStorm无法推断{{1}实际上返回正确类的对象

它应该是这样的:

load