【问题标题】:Can I redirect all PRINT and ECHO output to a PHP function?我可以将所有 PRINT 和 ECHO 输出重定向到 PHP 函数吗?
【发布时间】:2013-03-03 00:21:10
【问题描述】:

我继承了一些古老的代码来探索并弄清楚发生了什么。在整个意大利面条代码中散布着数百个几乎无法跟踪的回声和打印。

我一直在研究和搜索使用 STDOUT 的变体,但找不到任何不谈论使用和替代 PRINT/ECHO 的内容。

我正在寻找一种方法来有效地替换 PHP Echo/Print 使用我自己的函数,例如“MyEcho”,它将询问/记录从何时何地打印的内容。

有没有办法做到这一点,或者我必须编写函数,并替换整个代码中使用的所有打印/回显?

【问题讨论】:

  • 我觉得可以覆盖系统echo/print函数;但其他人需要加强/拒绝这个想法。
  • echo 是一种语言结构,而不是函数,因此您不能覆盖它。您可以使用输出缓冲来防止将输出发送到浏览器,直到您想要它为止,但是如果您想监视什么时候回显,这对您没有帮助。
  • 您需要分别处理每个打印/回显吗?如果没有,您可以使用输出缓冲并在运行旧代码后处理完整的输出。
  • 我认为在这种情况下,您只需要一个好的 IDE 并替换所有的回声/打印。就我而言,我在 OSX 上使用 coda2,它允许我使用正则表达式查找和替换代码,寻找类似的东西。在很多情况下,替换/删除旧的东西最终可能会节省你的时间。

标签: php stdout


【解决方案1】:

使用output control functions,例如ob_start()

【讨论】:

    【解决方案2】:

    正如the manual on echo 所说,它不是真正的函数,而是一种语言结构,因此您不能像使用系统函数那样覆盖它。 (使用命名空间)

    我认为你最好的选择是简单地使用类似 ecobyte replace text 的东西来替换 echoprint 用别的东西。

    请记住,您可能会遇到问题,因为 echoprint 不需要括号,但您的函数需要括号。此外,echo 可以允许使用 , 的多个参数,这也可能会破坏您自己的方法。

    我认为没有太多事情要做,然后全部替换并希望最好或手动完成。

    【讨论】:

    • 这就是我所反对/害怕的......使用/语法的零一致性,所以这个问题真的是一个“万岁玛丽”,希望在某个地方有一些 PHP 巫术会有所帮助.
    • 您可以随时更改 PHP 源代码并运行您自己的编译版本 :) 但是用 myprint($1); 替换所有 print(.*);echo(.*); 的正则表达式应该在 99% 的情况下都可以正常工作,即使使用echo 的多个变量它将起作用(您的函数将简单地获取多个参数)并且双括号也无关紧要。
    【解决方案3】:

    看来直接重载echo可能不太可能,但是this other StackOverflow question可能有一些线索给你。

    您可以进行批量搜索/替换,将 echo 替换为 echo __FILE__ , __LINE__ ,

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多