Ridichiarare una funzione (override)
Qual è il metodo migliore per modificare una funzione precedentemente dichiarata in una nuova?
per esempio, c'è già dichiarata:
function smth(){
echo 'aaa';
}
e voglio che visualizzi non aaa, ma bbb
function smth(){
echo 'bbb';
}
ma quando inserisco la nuova funzione (dentro functions.php), ottengo un messaggio di errore
(Fatal error: Cannot redeclare **smth()** (previously declared in ... )
AGGIORNAMENTO - Ho trovato una soluzione:

PHP non consente di ridefinire le funzioni. Se scrivi la funzione originale, ci sono molti modi per permetterti di scrivere funzioni più flessibili.
Condizioni basate sugli argomenti passati e gli hook dei filtri sono le prime cose che mi vengono in mente.
ESEMPIO 1:
function smth( $out = 'a' ){
if ( $out === 'a' ) {
echo 'aaa';
} else {
echo 'bbb';
}
}
Dopo di che, la prima chiamata
smth();
e la seconda volta:
smth('b');
ESEMPIO 2
function smth(){
echo apply_filters('my_smth_filter', 'aaa');
}
Dopo di che, la prima chiamata
smth();
e la seconda volta:
add_filter('my_smth_filter', function() {
return 'bbb';
});
smth();
Se la funzione originale non è una tua funzione e non fornisce alcun filtro per modificare l'output e hai assolutamente bisogno di cambiare il comportamento di quella funzione, allora dai un'occhiata a Patchwork, una libreria PHP che ti permette di ridefinire le funzioni definite dall'utente durante l'esecuzione. Tuttavia, usa Patchwork con cautela e solo se assolutamente necessario, perché Patchwork è pensato per essere utilizzato a scopo di testing, non in produzione.

Consiglierei di utilizzare un approccio OOP, come:
class SomeClass
{
public function aa()
{
echo 'aa';
}
}
class SomeOtherClass extends SomeClass
{
public function aa()
{
return 'bb';
}
}
$a = new SomeClass();
$a->aa(); // restituisce aa
$b = new SomeOtherClass();
$b->aa(); // restituisce bb
