Redeclarare funcție (suprascriere)
Care este cea mai bună metodă pentru a modifica o funcție declarată anterior într-una nouă?
de exemplu, există deja declarată:
function smth(){
echo 'aaa';
}
și vreau să afișeze nu aaa, ci bbb
function smth(){
echo 'bbb';
}
dar când inserez noua funcție (în functions.php), primesc mesajul de eroare
(Fatal error: Cannot redeclare **smth()** (previously declared in ... )
ACTUALIZARE - Am găsit o soluție:

PHP nu permite redeclararea funcțiilor. Dacă scrii funcția originală, există multe modalități care îți permit să scrii funcții mai flexibile.
Condiționarea pe argumente transmise și hook-urile de filtrare sunt primele care îmi vin în minte.
EX. 1:
function smth( $out = 'a' ){
if ( $out === 'a' ) {
echo 'aaa';
} else {
echo 'bbb';
}
}
După aceea, prima apelare:
smth();
și a doua oară:
smth('b');
EX. 2
function smth(){
echo apply_filters('my_smth_filter', 'aaa');
}
După aceea, prima apelare:
smth();
și a doua oară:
add_filter('my_smth_filter', function() {
return 'bbb';
});
smth();
Dacă funcția originală nu este scrisă de tine și nu oferă niciun filtru pentru a modifica output-ul și absolut trebuie să schimbi comportamentul acelei funcții, atunci uită-te la Patchwork, o bibliotecă PHP care îți permite să redefinesti funcții definite de utilizator în timpul execuției. Totuși, folosește Patchwork cu prudență și doar dacă este absolut necesar, deoarece Patchwork este destinat să fie folosit în scopuri de testare, nu în producție.

Aș sugera să folosești o abordare orientată pe obiecte (OOP), cum ar fi:
class SomeClass
{
public function aa()
{
echo 'aa';
}
}
class SomeOtherClass extends SomeClass
{
public function aa()
{
return 'bb';
}
}
$a = new SomeClass();
$a->aa(); // afișează aa
$b = new SomeOtherClass();
$b->aa(); // afișează bb
