l polimorfismo ad hoc permette di avere delle funzioni di nome identico, con delle funzionalità simili, in classi che non hanno nessun rapporto fra loro (se non ovviamente essere figlie della stessa classe oggetto).
Il polimorfismo definisce quindi degli operatori il cui uso sarà diverso secondo il tipo di parametri che gli sono passati. E' così possibile ad esempio sovraccaricare l'operatore + e fargli realizzare delle azioni diverse a seconda se si tratti di un'operazione tra due numeri interi (addizione) o tra due stringhe di caratteri (concatenazione).
Il polimorfismo parametrico, detto genericità, rappresenta la possibilità di definire più funzioni di nome identico ma con parametri diversi (in numero e/o tipo). Il polimorfismo parametrico rende quindi possibile la scelta automatica del metodo corretto da adottare secondo il tipo di dato definito.
Così, si possono ad esempio definire più metodi omonimi che effettuano una somma di valori:
Il metodo int addition (int, int) darà come risultato la somma di due numeri interi;
Il metodo float addition (float, float) darà come risultato la somma di due flottanti;
Il metodo char addition(char, char) potrà definire la somma di due caratteri scelti dall'autore, ecc.
Viene chiamata firma il numero e il tipo (statico) di argomenti di una funzione. È quindi la firma di un metodo a determinarne il funzionamento.
In PHP questo vale solamente in termini di numero e nome dei parametri e non per il tipo (essendo il linguaggio non fortemente tipato)
Il polimorfismo ereditario
La possibilità di ridefinire un metodo in classi ereditiere di una classe di base viene detta specializzazione. E' quindi possibile denominare il metodo di un oggetto senza preoccuparsi del suo tipo intrinseco: si tratta del polimorfismo ereditario. Questo permette di estrarre dei dettagli delle classi specializzate da una famiglia di oggetto, nascondendole in un'interfaccia comune (che è la classe di base).
.