IDE 动态实例化的静态分析类
IDE static analysis for dynamically instantiated classes
我正在从变量(在受控环境中)创建一个 class,如下所示:
$controller = new $controllerClassName();
但是我的IDE不知道class是什么类型。所以,我想知道是否有办法识别 class(也许我可以创建一个接口)。
这就是我想要做的:
$controller = (InterfaceController) new $controllerClassName();
编辑: 我正在使用 PhpStorm IDE
解法:
正如 yivi 所建议的那样,我已经使用了 PHP-Doc 注释,所以现在 working:
$controller = new $controllerClassName();
/** @var MyInterface $controller */
请注意 "MyInterface" 可以是 class 或接口。
此外,我尝试执行以下代码,但没有成功。看来注解必须在变量的同一块中:
/**
* @param string $var1
* @param string $var2
* ...
* @var MyInterface $controller
*/
function thisIsAFunction($var1, $var2, ...) {
...
$controller = new $controllerClassName(); // <- Class still unknown
...
}
也许您需要稍微调整一下 IDE。
或者为了让您的 IDE 清楚,您可以使用指向您的 new $controllerClassName();
的名称空间
您可以阅读有关命名空间的更多信息 here
您不指定 ide,但在大多数功能强大的 PHP IDE 中,您可以使用 PHP-DOC annotations 指定类型并帮助 static-analysis。
例如:
/** @var SomeClass $someClass */
$someClass->thisCouldBeAutoCompleted();
在您的情况下,由于您出于某种原因动态实例化 class,您可能应该(如您所说)使用由您负责的 classes 实现的接口实例化,或者一个 parent class 的家庭。
所以也许:
$painter = new $painterImplementingClass();
/** @var PaintInterface $painter $painter*/
$painter->line($point1, $point2, $color);
// auto-completion should work for Pencil, Pen, Brush and other
// classes that implement PaintInterface
或者
$vehicle = new $vehicleClass();
/** @var AbstractVehicle $vehicle */
$vehicle->accelerate($acceleration, $time);
// auto-completion and static analysis should work for Car, Bicycle,
// Boat and other classes that extend AbstractVehicle
我正在从变量(在受控环境中)创建一个 class,如下所示:
$controller = new $controllerClassName();
但是我的IDE不知道class是什么类型。所以,我想知道是否有办法识别 class(也许我可以创建一个接口)。
这就是我想要做的:
$controller = (InterfaceController) new $controllerClassName();
编辑: 我正在使用 PhpStorm IDE
解法:
正如 yivi 所建议的那样,我已经使用了 PHP-Doc 注释,所以现在 working:
$controller = new $controllerClassName();
/** @var MyInterface $controller */
请注意 "MyInterface" 可以是 class 或接口。
此外,我尝试执行以下代码,但没有成功。看来注解必须在变量的同一块中:
/**
* @param string $var1
* @param string $var2
* ...
* @var MyInterface $controller
*/
function thisIsAFunction($var1, $var2, ...) {
...
$controller = new $controllerClassName(); // <- Class still unknown
...
}
也许您需要稍微调整一下 IDE。
或者为了让您的 IDE 清楚,您可以使用指向您的 new $controllerClassName();
的名称空间
您可以阅读有关命名空间的更多信息 here
您不指定 ide,但在大多数功能强大的 PHP IDE 中,您可以使用 PHP-DOC annotations 指定类型并帮助 static-analysis。
例如:
/** @var SomeClass $someClass */
$someClass->thisCouldBeAutoCompleted();
在您的情况下,由于您出于某种原因动态实例化 class,您可能应该(如您所说)使用由您负责的 classes 实现的接口实例化,或者一个 parent class 的家庭。
所以也许:
$painter = new $painterImplementingClass();
/** @var PaintInterface $painter $painter*/
$painter->line($point1, $point2, $color);
// auto-completion should work for Pencil, Pen, Brush and other
// classes that implement PaintInterface
或者
$vehicle = new $vehicleClass();
/** @var AbstractVehicle $vehicle */
$vehicle->accelerate($acceleration, $time);
// auto-completion and static analysis should work for Car, Bicycle,
// Boat and other classes that extend AbstractVehicle