php - 我可以自动修改/添加语句到 PHP 中的所有用户定义函数吗?

标签 php metaprogramming

我想为请求中的所有 PHP 用户定义函数修改或添加功能。
比如,将一个片段添加到一个函数体中,它将记录传递给一个函数的所有参数。在执行时。
我认为这更像是一个 lisp 宏,但也许有办法。
在某种伪代码中:

foreach (user-defined-function-in-call-stack){
    prepend-to-body($function){
        log(funct_get_args(), $function->name);
    }
}

最佳答案

虽然 AOP 和源代码重写最接近您描述的实现,但对于您在问题和评论中提到的特定用例,调试扩展可能是最合适的工具。
不同之处在于无需修改 PHP 代码本身,扩展可以在较低级别与运行时引擎集成,并直接观察发生的一切。
具体来说,流行的开源 XDebug 扩展有 a function tracing mode专为您描述的用例而构建:

Those so-called "function traces" can be a help for when you are new to an application or when you are trying to figure out what exactly is going on when your application is running. The function traces can optionally also show the values of variables passed to the functions and methods, and also return values.


安装扩展程序取决于您安装 PHP 的方式,但通常与安装适当的软件包一样简单(例如 sudo apt install php-xdebug )。有a page in the XDebug manual with instructions for various scenarios .
XDebug 有很多功能,因此也有很多配置选项,但这些在 XDebug 3 中已经大大简化,所以要开始,你应该能够设置:
  • xdebug.mode=trace 启用该功能并为其他设置设置适当的默认值
  • xdebug.start_with_request=yes 无需特殊触发器即可跟踪所有调用
  • xdebug.output_dir 设置为 Web 服务器进程可以写入的某个目录

  • the documentation对于可用于调整行为和输出的其他选项。

    关于php - 我可以自动修改/添加语句到 PHP 中的所有用户定义函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67409816/

    相关文章:

    php - 使用 PDO 和准备好的语句更改 MySQL 表

    php - "add employee"没有页面重定向的表单

    c++ - GCC vs VS 匿名类型作为模板参数

    c++ - C++ 中的整数到模板类型集合

    php - 哪个更符合逻辑且性能更好?一个 CI 应用程序或多个 CI 应用程序

    php - 使用 SQL 行值创建 HTML 选择选项并将它们用于 SQL 查询

    haskell - 不能为这种类型派生 Generic 吗?

    ruby - 使用一组可以调用另一个类方法的方法创建一个 Mixin

    prolog - SWI-prolog中的动态规则声明

    php - 尝试在 Laravel 中使用循环联合语句