Provenendo da C# Sono abituato a sovraccaricare i miei metodi con parametri tipizzati in modo variabile. Poiché non è possibile fare questo in PHP, spesso mi creo metodi come nell'esempio qui sotto, che accetta una variabile, poi mi controllare il tipo e agire di conseguenza:È possibile consentire a una variabile di funzione PHP di essere una stringa o un array come pattern o anti-pattern?
showLength('one');
showLength(array(
'one',
'two',
'three'
));
function showLength($stringOrArray) {
$arr = array();
if(is_array($stringOrArray)) {
$arr = $stringOrArray;
} else if(is_string($stringOrArray)) {
$arr[] = $stringOrArray;
} else {
//exception
}
foreach ($arr as $str) {
echo strlen($str).'<br/>';
}
}
uscita:
3
3
3
5
4
Questo mi dà la stessa funzionalità di C# ma sembra un po 'disordinato, come se ci fosse un modo migliore.
È questo il metodo accettato per eseguire il overloading del metodo in PHP (5.3) oppure esiste un modo migliore?
Sì, CodeIgniter lo fa in molte delle sue funzioni e funziona bene e consente di risparmiare un sacco di codice. Finché è documentato, lo consiglio. Ricorda solo di restituire il tipo atteso. Se ho passato un numero intero a un modello, mi aspetto di restituire un oggetto. Se ho passato un array di interi, mi aspetto una schiera di oggetti (forse indicizzati per ID). – Sid