如何在不编辑函数或调用它的代码的情况下拦截函数调用(带参数)?

时间:2014-07-14 15:10:29

标签: php drupal-7

我希望拦截CMS功能并在每次调用时记录它的参数。即我想要拨打t()的所有电话。问题是,在CMS核心中有1875个调用t(),因此编辑调用它的代码是不可行的。另一方面,我可以在第一次函数调用之前包含我的代码片段。

我已经看过How to intercept PHP function call in my script?,但它接受的答案假设用户可以通过调用新功能来替换直接呼叫。那不是我的情况。链接的文章是关于拦截方法,所以它似乎也不适用。

其他一些Drupal函数,如variable_set(),使用全局数组,所以I was able to plug into them by replacing global array with an object。遗憾的是,t()仅使用global $language,并且此变量不是针对函数参数搜索的数组,因此这种方法不可能我需要本机PHP解决方案

有没有办法拦截实际的函数调用,它们的编写方式?现在我实际上攻击了t(),但我真的,真的想要避免它。遗憾的是,我在网上找到的所有解决方案似乎都应该与自己的代码进行交互,而不是与其他人在框架中编写的代码进行交互。

最后但并非最不重要:我可以在开发机器上安装其他软件。它的Ubuntu服务器。因此,如果可以使用任何PHP插件,我想知道这一点。我会更喜欢不需要的解决方案,但我可以忍受它。

此问题与Drupal Answers上的How to make strings from templates translatable on all pages they appear?有关,但并非重复。现在,我正试图找到一种方法来攻击Localization Client模块的function _l10n_client_page_strings()。但是我确信实际的函数调用拦截会让很多人感兴趣。

为什么我需要它?

回答this comment:嗯,我相信这是一个非常有趣的PHP问题,但我的问题也有实用的目的。

要翻译网站,传统上会有:

  1. 导出可翻译字符串
  2. 翻译* .po文件而不查看字符串的使用位置和方式,可能会引入错误(通常人员翻译网站不是日常管理的网站,因此翻译人员知道上下文)
  3. 导入文件
  4. 测试翻译,记录错误和无意义的事情
  5. 转到2.
  6. 使用Localization Client程序应该是这样的:

    1. 请参阅包含未翻译/严重翻译的字符串的页面
    2. 直接修复翻译
    3. 更简单,更快速,更不容易出错。该模块唯一的问题是它不收集页面上实际使用的字符串,但使用的查询"将无法可靠地运行" (他们自己的评论),所以:

      • 它列出了很多字符串,其中一些字符串并没有真正用在页面上,恰好是在页面生成中使用的模块中
      • 更糟糕的是,它错过了一些字符串。

      这就是为什么我试图用一些效果较慢的东西来修补_l10n_client_page_strings()功能,但也直接做了它的工作。而且我知道模板文件中的一些调用可能发生得太晚了,但是当我达到它时,我愿意跨越那个桥梁。现在我需要一种可靠的方法来实际了解这些调用,而不会破坏任何东西,除了模块我试图按照它应该的方式工作。

0 个答案:

没有答案