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
我的问题是,最好的实现方式是什么?
对于扫描,我认为这是一个昂贵的过程。所以我打算放一个扫描仪,并创建一个文件,当它检测到文件夹结构发生变化时,该文件将被重写。但是,如何在调用期间有效地检测文件夹中的更改、使缓存无效并重新扫描?我真的不想每 N 次都重新扫描一次。所以我想做一个校验和,只有在检测到变化时才重新扫描。这个数据文件将被路由器 class.
用于提供路由数据
对于注解,我打算遵循PHPDoc标准语法,但是如何阅读@path注解才有效呢?我应该使用 ReflectionClass,还是只使用 get_file_contents 并解析它更好?因为我认为我不需要实例化 class,只需收集所有信息并将它们放入序列化文件中。
注意:我不是在寻找框架。我正在寻找一种方法来编译所有控制器的列表,并将它们提供给框架。
谢谢
您应该检查一些现有的问题解决方案。
只是看一下注释,我知道的最佳选择是 Doctrine Annotations
您也可能对现有的路由组件感兴趣,例如 Symfony Router - 作为一个独立的组件工作,包括配置注释,或在 Symfony 框架内工作。
您可以使用 symfony 路由系统来完成此操作。在您的项目中安装路由器组件 composer require symfony/routing
这可能有点奇怪,但我想制作一个 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
我的问题是,最好的实现方式是什么?
对于扫描,我认为这是一个昂贵的过程。所以我打算放一个扫描仪,并创建一个文件,当它检测到文件夹结构发生变化时,该文件将被重写。但是,如何在调用期间有效地检测文件夹中的更改、使缓存无效并重新扫描?我真的不想每 N 次都重新扫描一次。所以我想做一个校验和,只有在检测到变化时才重新扫描。这个数据文件将被路由器 class.
用于提供路由数据
对于注解,我打算遵循PHPDoc标准语法,但是如何阅读@path注解才有效呢?我应该使用 ReflectionClass,还是只使用 get_file_contents 并解析它更好?因为我认为我不需要实例化 class,只需收集所有信息并将它们放入序列化文件中。
注意:我不是在寻找框架。我正在寻找一种方法来编译所有控制器的列表,并将它们提供给框架。
谢谢
您应该检查一些现有的问题解决方案。
只是看一下注释,我知道的最佳选择是 Doctrine Annotations
您也可能对现有的路由组件感兴趣,例如 Symfony Router - 作为一个独立的组件工作,包括配置注释,或在 Symfony 框架内工作。
您可以使用 symfony 路由系统来完成此操作。在您的项目中安装路由器组件 composer require symfony/routing