PHP类扫描程序

时间:2016-07-28 20:54:42

标签: php phpdoc

这可能很奇怪,但我想制作一个班级扫描仪。

让我们说,我想制作一条REST路线,但我懒得为每个班级写路线。所以,我的文件夹组织如下:

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

在内部服务类中,我会添加注释,如

class This {
   /**
   * @path this/@id
   */
  public function get($id) {
  }
}

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

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

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

我的问题是,实施它的最佳方式是什么?

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

  2. 对于注释,我计划遵循PHPDoc标准语法,但阅读@path注释的有效方法是什么?我应该使用ReflectionClass,还是更好的只是get_file_contents并解析它?因为我认为我不需要实例化类,只收集所有信息并将它们放在序列化文件中。

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

    谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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