发布于 

PHP命名空间引用变量类名的实现

用例场景

前些日在项目里遇到一个场景,就是获取Plugins目录下的所有对象名,并且每个对象里都有一个静态的数组类型的参数:$info,很明显这是一个插件的目录,$info也就是插件的一些基本信息什么的。

解决方案

我的想法就是获取到目录下的所有PHP文件,然后去掉.php文件后缀获取对象的名称,那就好办了,通过命名空间来new一下,就能获取到我想要的配置信息了。

也是在网上查了很多资料,很快也是实现了该功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 获取插件列表
* @return array
*/
public static function list(): array
{
$dir = \think\facade\App::getAppPath().'/controller/Plugins';
$pathList = glob($dir.'/*.php');
$res = [];
foreach ($pathList as $key => $value) {
$res[] = basename($value,'.php');
}
return $res;
}
1
2
3
4
5
6
7
8
9
10
/**
* 通过插件名称获取配置信息
* @return array
*/
public static function info(string $name): array
{
$className = '\app\controller\Plugins\\'.$name;
$obj = new $className();
return $obj::$info;
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @Ricky 创建,使用 Stellar 作为主题。

© 2022 Ricky Story | 备案号:豫ICP备2021010955号