变量 "cast" 的 Phpdoc?
Phpdoc for variable "cast"?
基础类:
abstract class A
{
public function methodA() { echo __FUNCTION__.'<br>'; }
}
class B extends A
{
public function methodB() { echo __FUNCTION__.'<br>'; }
}
到目前为止一切顺利。
可以创建其中任何一个的工厂:
class Factory
{
/**
* @return A
*/
public static function createAorB()
{
return new B();
}
}
phpdoc 是对的,因为它说 "return something comes from A
"。
现在棘手的部分来了:
class OwnClass
{
/**
* @var A
*/
protected $var;
public function __construct()
{
$this->var = \Factory::createAorB();
}
}
class OwnClassB extends OwnClass
{
public function callMe()
{
$this->var->methodA();
$this->var->methodB(); // this will also run, but IDE wont autocomplete with this method
}
}
(new OwnClassB())->callMe();
这肯定会 运行,但请检查 methodB()
调用。 IDE 不会使用此方法自动完成。如何通过 phpDoc 判断 var 现在是 B
,而不是 A
?
您可以为 PHPStorm 的自动完成覆盖继承的属性:
/**
* @property B $var
*/
class OwnClassB extends OwnClass
{
//...
}
但是,我个人认为您试图解决错误的问题。如果你有一个 Factory class returns A
或 B
,你不应该键入提示 return 值改为 A
。相反,您应该同时提供:
class Factory
{
/**
* @return A|B
*/
public static function createAorB()
{
return new B();
}
}
这两个选项足以让 PHPStorm 将这两个方法显示为自动完成选项,但后者在代码实际执行的操作方面是准确的(好吧,不是在这个例子中,但考虑到函数名称我猜这是您的实际实现是做什么的)。
基础类:
abstract class A
{
public function methodA() { echo __FUNCTION__.'<br>'; }
}
class B extends A
{
public function methodB() { echo __FUNCTION__.'<br>'; }
}
到目前为止一切顺利。 可以创建其中任何一个的工厂:
class Factory
{
/**
* @return A
*/
public static function createAorB()
{
return new B();
}
}
phpdoc 是对的,因为它说 "return something comes from A
"。
现在棘手的部分来了:
class OwnClass
{
/**
* @var A
*/
protected $var;
public function __construct()
{
$this->var = \Factory::createAorB();
}
}
class OwnClassB extends OwnClass
{
public function callMe()
{
$this->var->methodA();
$this->var->methodB(); // this will also run, but IDE wont autocomplete with this method
}
}
(new OwnClassB())->callMe();
这肯定会 运行,但请检查 methodB()
调用。 IDE 不会使用此方法自动完成。如何通过 phpDoc 判断 var 现在是 B
,而不是 A
?
您可以为 PHPStorm 的自动完成覆盖继承的属性:
/**
* @property B $var
*/
class OwnClassB extends OwnClass
{
//...
}
但是,我个人认为您试图解决错误的问题。如果你有一个 Factory class returns A
或 B
,你不应该键入提示 return 值改为 A
。相反,您应该同时提供:
class Factory
{
/**
* @return A|B
*/
public static function createAorB()
{
return new B();
}
}
这两个选项足以让 PHPStorm 将这两个方法显示为自动完成选项,但后者在代码实际执行的操作方面是准确的(好吧,不是在这个例子中,但考虑到函数名称我猜这是您的实际实现是做什么的)。