Переопределение функции (override)
Какой лучший способ изменить ранее объявленную функцию на новую?
например, уже объявлено:
function smth(){
echo 'aaa'; // выводит aaa
}
и я хочу, чтобы выводилось не aaa, а bbb
function smth(){
echo 'bbb'; // выводит bbb
}
но когда я вставляю новую функцию (внутри functions.php), я получаю сообщение об ошибке
(Fatal error: Cannot redeclare **smth()** (previously declared in ... )
ОБНОВЛЕНИЕ - Я нашел решение:

PHP не позволяет переопределять функции. Если вы написали оригинальную функцию, существует множество способов сделать её более гибкой.
Условные проверки переданных аргументов и хуки-фильтры — первое, что приходит на ум.
ПРИМЕР 1:
function smth( $out = 'a' ){
if ( $out === 'a' ) {
echo 'aaa';
} else {
echo 'bbb';
}
}
После этого первый вызов:
smth();
и второй раз:
smth('b');
ПРИМЕР 2
function smth(){
echo apply_filters('my_smth_filter', 'aaa');
}
После этого первый вызов:
smth();
и второй раз:
add_filter('my_smth_filter', function() {
return 'bbb';
});
smth();
Если оригинальная функция не ваша и она не предоставляет фильтров для изменения вывода, но вам крайне необходимо изменить её поведение, обратите внимание на библиотеку Patchwork, которая позволяет переопределять пользовательские функции во время выполнения. Однако используйте Patchwork с осторожностью и только в случае крайней необходимости, так как она предназначена для тестирования, а не для продакшена.

Я бы рекомендовал использовать объектно-ориентированный подход, например:
class SomeClass
{
public function aa()
{
echo 'aa';
}
}
class SomeOtherClass extends SomeClass
{
public function aa()
{
return 'bb';
}
}
$a = new SomeClass();
$a->aa(); // выводит aa
$b = new SomeOtherClass();
$b->aa(); // выводит bb
