PHP Class 扫描器

PHP Class scanner

这可能有点奇怪,但我想制作一个 class 扫描仪。

比方说,我想做一个 REST 路由,但是我懒得为每个 classes 写路由。所以,我的文件夹组织如下:

lib
|-router.php
service
|-modulea
  |-this.php
  |-that.php
|-moduleb
  |-notthis.php
  |-notthat.php

内部服务class是的,我会像

一样添加注释
class This {
   /**
   * @path this/@id
   */
  public function get($id) {
  }
}

现在,如果我想扫描服务文件夹中的所有 classes,然后调用

Router->register('this/@id', 'This->get(@id)')

每次找到带有@path 注释的class

我的问题是,最好的实现方式是什么?

  1. 对于扫描,我认为这是一个昂贵的过程。所以我打算放一个扫描仪,并创建一个文件,当它检测到文件夹结构发生变化时,该文件将被重写。但是,如何在调用期间有效地检测文件夹中的更改、使缓存无效并重新扫描?我真的不想每 N 次都重新扫描一次。所以我想做一个校验和,只有在检测到变化时才重新扫描。这个数据文件将被路由器 class.

  2. 用于提供路由数据
  3. 对于注解,我打算遵循PHPDoc标准语法,但是如何阅读@path注解才有效呢?我应该使用 ReflectionClass,还是只使用 get_file_contents 并解析它更好?因为我认为我不需要实例化 class,只需收集所有信息并将它们放入序列化文件中。

注意:我不是在寻找框架。我正在寻找一种方法来编译所有控制器的列表,并将它们提供给框架。

谢谢

您应该检查一些现有的问题解决方案。

只是看一下注释,我知道的最佳选择是 Doctrine Annotations

您也可能对现有的路由组件感兴趣,例如 Symfony Router - 作为一个独立的组件工作,包括配置注释,或在 Symfony 框架内工作。

您可以使用 symfony 路由系统来完成此操作。在您的项目中安装路由器组件 composer require symfony/routing