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

2022-08-30 19:12:41

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

我想这样做的原因是因为我有数千行代码调用mail(),我不想重写所有这些代码。

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


答案 1

有一个扩展允许您覆盖函数。它旨在用于调试,但我想您可以根据需要使用它。看一看:

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

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


答案 2

你所指的通常称为方法重载

虽然PHP通常不支持,但实际上您可以使用runkit_function_remove()或runkit_function_redefine(重新定义内部函数(以及用户函数)。当然,要使用它,您需要完全控制PHP安装 - 因为它没有与PHP捆绑在一起,因此您需要安装runkit扩展

同样,在正常情况下,内部函数和用户函数不能在PHP中重新定义(或重载)。这种情况说明了使用用户函数包装某些内部函数的好处。


推荐