【发布时间】:2019-02-10 05:06:31
【问题描述】:
为什么会这样:
/* @var $foo ClassName */
$foo->someFunction();
但这个不是:
/* @var $this->foo ClassName */
$this->foo->someFunction();
这是完整的设置:
abstract class Bar
{
$foo = null;
}
class Cool
{
// some function sets $this->foo
public function doSthWithFoo() // does not work
{
/* @var $this->foo ClassName */
$this->foo->someFunction();
}
public function doSthWithFoo2() // works just fine
{
$test = $this->foo
/* @var $test ClassName */
$test->someFunction();
}
}
另一种方法是在新类中再次定义 $foo 变量:
class Cool
{
/* @var $foo ClassName */
$foo = null;
// ...
}
当然,PHP 代码执行正确,但 PHPDoc 有问题。
(PhpStorm 2018.2.2)
提前致谢!
【问题讨论】:
-
Docblock 抽象类,这应该会给你更好的结果
-
“但是 PHPDoc 有问题。” 这不是问题。您只是想创建自己的 PHPDoc 应该如何工作的规则。但它不是那样工作的——就这么简单。您不能使用
@var输入特定的子实体 - 只能是顶级/整个实体。所以这就是戴尔所说的......或者你可以在你的Cool类中尝试@property标签。 -
@Dale / @LazyOne:是的,但在这种情况下这是不可能的。在这种情况下,抽象类的
$foo属性在类继承它并设置其特定类型之前没有类型。目的是“强制”使用继承的$foo属性,而不是创建许多不同的属性......(但正如你所说,这超出了这个问题)@LazyOne:你说得对,PHPDoc 不是错误的,但它会如果可行,那就太棒了。 -
查看 phpstorm.meta 文件,它们可能不是解决方案,但我相信它们可能会有所帮助,我会尝试为您获取链接
标签: php annotations phpstorm phpdoc