Подтвердить что ты не робот

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

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

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

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

Спасибо

4b9b3361

Ответ 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. Эта ситуация иллюстрирует преимущества переноса некоторых внутренних функций с помощью пользовательской функции.

Ответ 3

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

Ответ 4

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

заменить

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

к

   $1new_function_name$2

и

   ^mail([\s(]+)

к

   new_function_name$1

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