Можно ли заменить функцию в php (например, почту) и заставить ее сделать что-то еще?

Я хочу переписать функцию в PHP (скажем, функцию mail ()) и хочу сделать это, когда я вызову mail () с этого момента, она загрузит мою версию mail (), а не версию PHP по умолчанию. Возможно ли это в php?

Причина, по которой я хочу сделать это, состоит в том, что у меня есть тысячи строк кода, которые вызывают mail (), и я не хочу переписывать их все.

Также для дальнейшего использования, в компьютерном программировании, что он называется, когда вы делаете что-то вроде этого?

благодаря

Существует расширение, которое позволяет вам переопределять функции. Он предназначен для отладки, но я думаю, вы можете использовать его для своих нужд. Взглянуть:

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

Если вы хотите вызвать исходную функцию в своей версии, обязательно прочтите этот комментарий: http://no.php.net/manual/en/function.override-function.php#50821

То, о чем вы говорите, обычно называется перегрузкой метода .

Хотя обычно это не поддерживается PHP, вы действительно можете переопределить внутренние функции (а также пользовательские функции) с помощью runkit_function_remove() или runkit_function_redefine() . Конечно, чтобы использовать это, вам нужно будет иметь довольно полный контроль над установкой PHP – так как он не связан с PHP, вам нужно будет установить расширение runkit .

Опять же, в нормальной ситуации внутренние функции, а также пользовательские функции не могут быть переопределены (или перегружены) в PHP. Эта ситуация иллюстрирует преимущество переноса некоторых внутренних функций с помощью пользовательской функции.

Это называется перегрузкой функций и не возможно в родном PHP, но возможно использование расширений, описанных в других ответах. Документация PHP утверждает, что это вообще невозможно: источник, который является неправильным.

Вы можете использовать регулярные выражения для замены имени функции в ваших файлах. Какое приложение вы используете, зависит от вас, но я бы рекомендовал дорогостоящий Powergrep (если вам это не понадобится).

замещать

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

в

  $1new_function_name$2 

а также

  ^mail([\s(]+) 

в

  new_function_name$1 

Извините за мое regexp-fu, я не знаю, как искать пробелы ИЛИ начинать строку в одном выражении.