Sør*_*ard 5 php reflection hook introspection
一点背景:在运行时,我希望能够检查当前调用的函数javadoc样式文档,以确定其正式(类型)声明.这将允许在调试和测试期间通过反射(代价)检查运行时类型(对于简单和复杂类型),我会发现非常有用的东西.
所以,在php中我想要在任何其他函数即将被调用时调用用户定义的函数.也就是说,如果函数foo()被调用,我想在之前调用我的callHookHandler()函数.
一种解决方案是在所有用户定义的类中实现__call(),但这既笨拙又不包括对类外定义的函数的支持,所以我正在寻找更好的解决方案.
这听起来有点有趣,所以我会试着回答它.
我希望这可以帮助你.让我知道事情的后续.
那么,你要问的是什么,这是如何:
对于功能:
$function = get_defined_functions().$functions['user']键并与ReflectionFunction班级一起检查每一个.你需要得到:
->getDocComment()->getParameters()runkit_function_renamerunkit_function_add使用在步骤#5中生成的代码和步骤#6中的参数列表创建新函数.对于类:
$classes = get_declared_classes();ReflectionObject并->getMethods()获得方法.确保该类不在内部,->isInternal()因为我们无法对内部类做任何事情.ReflectionMethod类遍历每个方法.像使用普通函数一样获取参数和PHPDoc/JavaDoc注释.runkit_method_add和runkit_method_rename代替.缺点:
您将无法检查内部类方法和函数(这很好,因为它们无论如何都不会有文档注释).
这是很多工作!我留下了很多想象力的部分,以避免这是一本短篇小说.
请把这个或开源发给我,让我知道你完成后,我真的想自己用它.联系信息在我的网站上,在我的个人资料中;)
或者:
您可以使用XDebug的函数跟踪以及反射,然后在事后分析结果,这样您就不必动态编辑代码.如果你想编写单元测试,你甚至可以自动化它.
希望类型检查使其成为PHP的未来版本并等待:https://wiki.php.net/rfc/typechecking
笔记:
这个类引用有一个可能有用的例子,在页面的评论部分解析docComments:http://us.php.net/manual/en/class.reflectionmethod.php
参考