动态文件系统 class 自动创建特定 class 的实例(在 PHP 和 PhpStorm 中)
Dynamic file system class to automatically create an instance of a specific class (in PHP and PhpStorm)
我创建了一个加载特定 class 的函数,并且还应创建此 class:
的新实例
class File {
public static function load($file, $folder = null, $local = false, $classname = null) {
if ($folder == 'root') {
$dir = '';
} elseif ($folder) {
$dir = $folder . '/';
} else {
$dir = 'classes/';
}
if ($local) {
$root = ROOT_ABS;
} else {
$root = ROOT_CMS_ABS;
}
require_once $root . $dir . $file . '.php';
// New Instance
if ($folder == null || $classname) {
if (!$classname) {
return new $file();
} else {
return new $classname();
}
}
}
我内置了一些额外的参数来指定是否应该访问我的 CMS 文件夹(ROOT_CMS_ABS
和 ROOT_ABS
常量)。因此,加载文件并创建对象的最小默认情况是例如:
$html = File::load('html');
问题:
我正在使用 PhpStorm,通常我可以按住 Ctrl + Click 来跳转到一个对象的函数。
但是现在 PhpStorm 无法识别加载了哪个 class。在我的示例中,这是因为我将 $router
分配给此 class 而不是编写 $router = new AltoRouter();
.
问题:
1) PhpStorm 是否可以通过另一种方式识别我所指的class?
2) 我对 PHP 中的 OOP 有点陌生,我能以某种方式改进我的 class 吗?
__
否则功能正常。所以这更有可能是 IDE 问题。
您可以通过在此类分配之前添加带有类型提示的内联 PHPDoc 注释来轻松解决它。例如:
/** @var MyClassName $router */
$router = File::load('AltoRouter', 'route');
除此之外:使用 $router = new AltoRouter();
更好——将实际的 class 加载留给 class 自动加载机制(遵循 PSR-4;成为标准的 Composer ..或您自己的实现)。
我创建了一个加载特定 class 的函数,并且还应创建此 class:
的新实例class File {
public static function load($file, $folder = null, $local = false, $classname = null) {
if ($folder == 'root') {
$dir = '';
} elseif ($folder) {
$dir = $folder . '/';
} else {
$dir = 'classes/';
}
if ($local) {
$root = ROOT_ABS;
} else {
$root = ROOT_CMS_ABS;
}
require_once $root . $dir . $file . '.php';
// New Instance
if ($folder == null || $classname) {
if (!$classname) {
return new $file();
} else {
return new $classname();
}
}
}
我内置了一些额外的参数来指定是否应该访问我的 CMS 文件夹(ROOT_CMS_ABS
和 ROOT_ABS
常量)。因此,加载文件并创建对象的最小默认情况是例如:
$html = File::load('html');
问题:
我正在使用 PhpStorm,通常我可以按住 Ctrl + Click 来跳转到一个对象的函数。
但是现在 PhpStorm 无法识别加载了哪个 class。在我的示例中,这是因为我将 $router
分配给此 class 而不是编写 $router = new AltoRouter();
.
问题:
1) PhpStorm 是否可以通过另一种方式识别我所指的class?
2) 我对 PHP 中的 OOP 有点陌生,我能以某种方式改进我的 class 吗?
__
否则功能正常。所以这更有可能是 IDE 问题。
您可以通过在此类分配之前添加带有类型提示的内联 PHPDoc 注释来轻松解决它。例如:
/** @var MyClassName $router */
$router = File::load('AltoRouter', 'route');
除此之外:使用 $router = new AltoRouter();
更好——将实际的 class 加载留给 class 自动加载机制(遵循 PSR-4;成为标准的 Composer ..或您自己的实现)。