queryString = $_SERVER['QUERY_STRING']) {
self::init();
} else {
self::setDirFiles();
self::outDirFiles();
}
}
/**
* 通过命名空间调用对应类方法
*
* @return void
*/
public function init()
{
try {
// 初始化类,再执行对应方法
$class = $this->newClass($this->queryString);
$class->main();
} catch (\ReflectionException $e) {
var_dump($e->getMessage());
}
echo "
";
}
/**
* 输出可访问的命名空间路径到页面
*
* @return void
*/
public function outDirFiles()
{
$li = '';
foreach ($this->dirFiles as $file) {
$newClass = $this->newClass($file);
$designUrl = '';
try {
if (is_object($newClass)) {
$designName = $newClass->designName;
$designUrl = $newClass->designRefUrl;
} else {
$designName = $newClass;
}
} catch (\Exception $e) {
$designName = $e->getMessage();
}
$nameUrl = $designUrl === '' ? $designName : "$designName";
$li .= "$nameUrl :$file";
}
echo "";
}
/**
* 根据命名空间获取对应对象
*
* @param $namespace
* @return object|string
*/
protected function newClass($namespace) : object|string
{
try {
// 先获取类信息
$reflect = new ReflectionClass($namespace);
// 初始化类,再执行对应方法
return $reflect->newInstanceArgs();
} catch (\ReflectionException $e) {
return $e->getMessage();
}
}
/**
* 设置demo所有可用文件
*
* @return void
*/
protected function setDirFiles()
{
// $dir = ROOTDIR . DIRECTORY_SEPARATOR . $this->dir;
$this->scandir($this->dir);
}
/**
* 循环目录
*
* @param $dir
* @return void
*/
protected function scandir($dir)
{
$dirFiles = scandir($dir);
$oldDir = $dir . DIRECTORY_SEPARATOR;
foreach ($dirFiles as $file) {
if ($file !== '.' && $file !== '..') {
$newsDir = $oldDir . $file;
if (is_dir($newsDir)) {
$this->scandir($newsDir);
} elseif ($file === 'Run.php') {
// 这样可以屏蔽非入口
$this->dirFiles[] = $oldDir . 'Run';
}
}
}
}
}