我正在从变量(在受控环境中)创建类,如下所示:
$controller = new $controllerClassName();
但是我的IDE不知道什么类型的类。所以,我想知道是否有办法识别类(也许我可以创建一个接口)。
这就是我想要做的事情:
$controller = (InterfaceController) new $controllerClassName();
编辑:我正在使用PhpStorm IDE
解决方案:
正如 yivi 所示,我使用过PHP-Doc注释,所以现在它正常工作:
$controller = new $controllerClassName();
/** @var MyInterface $controller */
请注意,“MyInterface”可以是类或接口。
另外,我尝试过以下代码,但无效。似乎注释必须位于变量的同一块中:
/**
* @param string $var1
* @param string $var2
* ...
* @var MyInterface $controller
*/
function thisIsAFunction($var1, $var2, ...) {
...
$controller = new $controllerClassName(); // <- Class still unknown
...
}
答案 0 :(得分:1)
您没有指定您的ide,但在大多数称职的PHP IDE中,您可以使用PHP-DOC annotations指定类型并帮助进行静态分析。
E.g:
/** @var SomeClass $someClass */
$someClass->thisCouldBeAutoCompleted();
在您的情况下,由于您出于某种原因动态实例化您的类,您可能应该(如您所说)使用由您可能实例化的类实现的接口,或者该系列的父类。 / p>
所以也许:
$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
答案 1 :(得分:-1)
也许您需要稍微调整一下IDE
或者为了清楚说明您的IDE,您可以使用指向var Test = "3700 NO LAND VALUE (Lease Property) (0.10)"
var regExp = /\(([0-9|.]+)\)/;
var matches = regExp.exec(Test);
var result = matches[1];
console.log(result);
的名称空间
您可以阅读有关名称空间here