Я хочу переписать функцию в 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, я не знаю, как искать пробелы ИЛИ начинать строку в одном выражении.