首页 / PHP / 在PHP中挂钩函数调用
在PHP中挂钩函数调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PHP中挂钩函数调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2126字,纯文字阅读大概需要4分钟。
内容图文
一点背景:在运行时,我希望能够检查当前调用的函数javadoc样式文档,以确定其正式(类型)声明.这将允许在调试和测试期间通过反射(代价)检查运行时类型(对于简单和复杂类型),我会发现非常有用的东西.
所以,在php中我想要在任何其他函数即将被调用时调用用户定义的函数.也就是说,如果函数foo()被调用,我想在之前调用我的callHookHandler()函数.
一种解决方案是在所有用户定义的类中实现__call(),但这既笨拙又不包括对类外定义的函数的支持,所以我正在寻找更好的解决方案.
解决方法:
这听起来有点有趣,所以我会试着回答它.
我希望这可以帮助你.让我知道事情的后续.
那么,你要问的是什么,这是如何:
对于功能:
>使用$function = get_defined_functions()获取所有已定义的函数.
>遍历$functions [‘user’]键并使用ReflectionFunction类检查每个键.你需要得到:
>评论使用 – > getDocComment()
>使用 – > getParameters()的参数
>做一些魔法(我会让你弄清楚如何使用一些常规的弹出来解析注释,并将其与反射中的参数列表进行匹配.不要忘记可选参数!)
>使用runkit_function_rename重命名该函数
>在字符串中生成代码,该字符串检查参数并调用重命名的函数
>将参数列表生成为字符串
>使用您在步骤#5中生成的代码和步骤#6中的参数列表,使用runkit_function_add创建一个新函数.
对于类:
>获取$classes = get_declared_classes()的类列表;
>遍历每个并使用ReflectionObject和 – > getMethods()检查它以获取方法.确保该类不是内部的 – > isInternal(),因为我们无法对内部类做任何事情.
>在内部循环中…使用ReflectionMethod类遍历每个方法.像使用普通函数一样获取参数和PHPDoc / JavaDoc注释.
>对函数执行的操作与使用runkit_method_add和runkit_method_rename相同.
缺点:
您将无法检查内部类方法和函数(这很好,因为它们无论如何都不会有文档注释).
这是很多工作!我留下了很多想象力的部分,以避免这是一本短篇小说.
请把这个或开源发给我,让我知道你完成后,我真的想自己用它.联系信息在我的网站上,在我的个人资料中;)
或者:
您可以将XDebug’s function trace与反射一起使用,然后在事后分析结果,这样您就不必动态编辑代码.如果你想编写单元测试,你甚至可以自动化它.
希望类型检查使其成为PHP的未来版本并等待:https://wiki.php.net/rfc/typechecking
笔记:
此类引用具有在页面的注释部分中解析docComments的潜在有用示例:
http://us.php.net/manual/en/class.reflectionmethod.php
参考
> get_defined_functions
> get_declared_classes
> ReflectionFunction
> ReflectionObject
> ReflectionMethod
> runkit
内容总结
以上是互联网集市为您收集整理的在PHP中挂钩函数调用全部内容,希望文章能够帮你解决在PHP中挂钩函数调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。