Переопределение функции PHP?

Если у меня есть функция:

function this($a){
   return $a;
}

Если бы я хотел переопределить функцию, то это было бы столь же просто как перезапись его?

function this($a, $b){  //New this function
   return $a * $b;
}
36
задан Charles 9 February 2014 в 18:32
поделиться

5 ответов

Нет, это вызывает ошибку:

Fatal error: Cannot redeclare foo()

Runkit предоставляет параметры, включая runkit_function_rename () и runkit_function_redefine () .

23
ответ дан 27 November 2019 в 05:59
поделиться

Вы не можете объявить обе функции одновременно, это приведет к ошибке.

0
ответ дан 27 November 2019 в 05:59
поделиться

Если вы имеете в виду перегрузку в смысле Java, то ответ - нет, это невозможно.

Цитата из руководства PHP по функциям :

PHP не поддерживает перегрузку функций, а также невозможно отменить или переопределить ранее объявленные функции.

Вы можете использовать расширение runkit , но использование runkit в производственных сценариях обычно считается сомнительной практикой. Если вы хотите обмениваться алгоритмами во время выполнения, взгляните на шаблон стратегии или Анонимные функции .

Если под переопределением вы подразумеваете добавление к существующей пользовательской функции, рефакторинг, замену или переписывание, тогда да: это так же просто, как вы показали. Просто добавьте в функцию дополнительный код, но убедитесь, что вы установили значение по умолчанию для обратной совместимости.

Другой вариант - использовать http://antecedent.github.io/patchwork

Patchwork - это библиотека PHP, которая позволяет переопределять определяемые пользователем функции и методы во время выполнения, слабо копируя функциональность. runkit_function_redefine в чистом коде PHP 5.3, который, помимо прочего, позволяет заменять статические и частные методы тестовыми двойниками.

22
ответ дан 27 November 2019 в 05:59
поделиться

Установка соответствующего значения по умолчанию для любых новых аргументов, которые вы добавляете, может помочь для обратной совместимости, т.е.:

function this($a, $b=1){  //New this function with a sane default.
    return $a * $b;
}

Я также рекомендую, для ясности, вообще избегать использования this для имен функций/переменных.

0
ответ дан 27 November 2019 в 05:59
поделиться

Вы не можете передекларировать его. Если ваш вопрос только о перегрузке этого примера, как насчет:

function this($a, $b=1)
{
    return $a * $b;
}
0
ответ дан 27 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: