代码之家  ›  专栏  ›  技术社区  ›  chris

是否可以替换php中的函数(如mail)并使其执行其他操作?

  •  19
  • chris  · 技术社区  · 16 年前

    我想用php重写一个函数(比如mail()函数),并希望从现在开始调用mail()时,它将加载我的mail()版本,而不是默认的php版本。这在PHP中是可能的吗?

    我之所以要这样做,是因为我有数千行代码调用mail(),我不想重写它们。

    另外,为了将来的参考,在计算机编程中,当你做类似的事情时,它叫什么?

    4 回复  |  直到 7 年前
        1
  •  21
  •   Milan BabuÅ¡kov    16 年前

    有一个扩展允许您重写函数。它本应用于调试,但我想您可以根据需要使用它。看一看:

    http://www.php.net/manual/en/function.override-function.php

    如果您希望在您的版本中调用原始函数,请确保阅读以下注释: http://no.php.net/manual/en/function.override-function.php#50821

        2
  •  9
  •   Tim Lytle    16 年前

    你所指的通常被称为 method overloading .

    虽然PHP通常不支持,但实际上 可以重新定义 内部函数(以及用户函数)使用 runkit_function_remove() runkit_function_redefine() . 当然,要使用它,您需要对PHP安装有几乎完全的控制权——因为它没有与PHP捆绑在一起,所以您需要 install the runkit extension .

    再一次, 在正常情况下,内部功能 以及用户功能 无法重新定义 (或重载)。这种情况说明了用用户函数包装一些内部函数的好处。

        3
  •  2
  •   Pekka    16 年前

    它被称为函数重载,在 本地的 但可以使用其他答案中概述的扩展。PHP文档声称根本不可能: source 这是不正确的。

        4
  •  0
  •   raveren    16 年前

    可以使用regexps替换文件中的函数名。你用什么应用程序由你决定,但我推荐最贵的 Powergrep (除非你不再需要它)。

    代替

       (\s+)mail([\s(]+)
    

       $1new_function_name$2
    

       ^mail([\s(]+)
    

       new_function_name$1
    

    抱歉,我的regexp fu,我不知道如何在一个表达式中搜索空格或行首。

    推荐文章