首先注意:请注意,这里不是编码问题,这是我在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类的对象而不是用户的对象
答案 0 :(得分:0)
这应该通过将docblock添加到load()
方法来解决。
问题是,在您的第二个示例中$user
不是new User()
的结果,而是->load()
调用的结果,看起来PHPStorm无法推断{{1}实际上返回正确类的对象
它应该是这样的:
load