Override in PrestaShop: quando sono accettabili e come evitarli
Un override sostituisce un metodo del core con il tuo. Funziona, ma ognuno è un debito che si paga al prossimo aggiornamento. Ti diciamo quando ne vale la pena.
Un override è una classe nella cartella override/ che estende una classe del core (per esempio class Cart extends CartCore) e riscrive alcuni dei suoi metodi. PrestaShop la carica al posto dell'originale grazie al suo autoloader e all'indice delle classi (var/cache/prod/class_index.php).
Perché danno così tanti problemi
- Firme che cambiano. Se il core cambia i parametri o i tipi di un metodo in una nuova versione, il tuo override non è più compatibile e PHP lancia un errore fatale al caricamento della classe. Nel passaggio a PrestaShop 9.1 diversi metodi hanno iniziato ad accettare tipi nullable espliciti, e i vecchi override hanno smesso di compilare.
- Due moduli, un metodo. Solo un modulo può sovrascrivere uno stesso metodo. Il secondo che ci prova fallisce all'installazione con il messaggio «the method X in the class Y is already overridden».
- Restano attivi anche se disattivi il modulo. L'override vive in
override/, non nella cartella del modulo. Disattivare il modulo non lo spegne; bisogna disinstallarlo. - Si perdono in silenzio. Se un aggiornamento o un deploy svuota la cartella, il negozio continua a funzionare ma senza la logica che dipendeva dall'override.
Come sapere quali override hai
Ogni override installato da un modulo ha un commento d'intestazione con il nome del modulo:
/*
* module: mimodulo
* date: 2026-09-22 01:12:36
* version: 1.4.0
*/
public function getPackageShippingCost(...)
Un elenco rapido dalla root del negozio:
grep -rho "module: [a-z0-9_]*" override/ | sort | uniq -c
I file senza quel segno li ha messi qualcuno a mano: sono i più pericolosi, perché nessuno sa perché ci sono.
Alternative, dalla migliore alla peggiore
- Un hook. Quasi tutto ciò che si fa con gli override nei negozi vecchi oggi ha un hook: mostrare qualcosa nel carrello, modificare le opzioni di pagamento, reagire al salvataggio di un oggetto.
- Decorare un servizio di Symfony. Nel back office di PrestaShop 8 e 9 molti pezzi sono servizi. Puoi avvolgerne uno con il tuo dal
services.ymldel tuo modulo senza toccare l'originale. - Sovrascrivere un template nel tema, se la modifica è visiva.
- Un override, solo quando non c'è altra strada, il più piccolo possibile e documentato.
override/, prova l'aggiornamento su una copia e carica ogni classe sovrascritta. Un override incompatibile non avvisa finché qualcuno non entra nella schermata che lo usa.La nostra regola
Quando un cliente ci chiede una funzionalità, l'override è l'ultima risorsa. Se non c'è alternativa, lo installa il modulo stesso (mai a mano), ha la sua intestazione e compare nella documentazione del negozio. Così, tra due anni, chi aggiornerà saprà cosa c'è e perché.