Funzione taglia stringhe
La programmazione funzionale è di enorme importanza
nella creazione di un programma o, come nel nostro caso, di
script scritti nel linguaggio lato-server PHP.
Ecco alcuni vantaggi nell’uso delle funzioni:
- Riusabilità del codice
- Maggiore chiarezza del codice
- Maggiore facilità nel trovare e correggere eventuali bug
Basandoci su questi tre punti andiamo oggi a sviluppare la
nostra seconda funzione scritta in PHP.
Nel primo tutorial abbiamo visto come tenere traccia del
numero di visitatori che accedono al nostro sito senza
appoggiarsi a un database. Quest’oggi vedremo una
funzione leggermente più semplice ma comunque molto
utile: limitare il numero di caratteri di una stringa.
A cosa ci
potrà servire questa funzione? Beh un esempio
chiarissimo lo potete vedere nella home page di
WebMasterPoint.org e precisamente nel riquadro riservato alle
news. In un sito con una template predefinita è
importantissimo mantenere il controllo sui contenuto generati
dinamicamente. Ed ecco che quindi questa funzione ci
può risultare molto utile.
Strutturazione della funzione.
Prima di tutto bisogna valutare quali saranno i parametri in
ingresso della funzione e quali saranno invece i parametri
restituiti.
Nella nostra prima funzione ci limiteremo a recuperare la
stringa e a tagliarla dopo 10 caratteri (valore variabile
stabilito all’interno della funzione). La funzione
ovviamente restituirà la stringa elaborata priva dei
caratteri in eccesso.
Il codice.
function tagliaStringa($testo) {
# CONFIGURAZIONE
# imposto il numero massimo di caratteri da visualizzare
# esclusi i (...) finali
$maxCaratteri = 10;
# SCRIPT
# salvo il numero di caratteri della stringa passata
$caratteri = strlen($testo);
# controllo se $caratteri è maggiore di $maxCaratteri
if($caratteri > $maxCaratteri) {
return substr($testo, 0, $maxCaratteri)."...";
} else {
return $testo;
}
}
?>
Esaminiamo la funzione.
Come potete vedere la variabile maxCaratteri imposta il
numero massimo di caratteri da stampare. La variabile
caratteri invece contiene il risultato
dell’elaborazione della funzione strlen($testo).
La funzione strlen() restituisce il numero di caratteri di
una stringa; nel nostro caso specifichiamo di contare il
numero di caratteri presenti nella variabile testo passata
alla funzione per copia.
Nella funzione troviamo un’istruzione di controllo if;
in poche parole verifichiamo se i caratteri della stringa
sono maggiori di quelli da noi impostati. Se ciò
accade restituiamo i primi 10 caratteri della stringa seguiti
da tre punti (…), altrimenti restituiamo la variabile
testo come ci è stata passata.
Vediamo ora come richiamare questa funzione.
Per prima cosa creeremo una variabile di tipo stringa con il
seguente valore: “WebMasterPoint.org, il punto di
riferimento per i webmaster italiani”.
Successivamente passeremo la variabile alla funzione
tagliaStringa() e salveremo il risultato nella variabile
risultato. In fine stamperemo il valore della variabile.
# assegniamo la stringa alla variabile $stringa
$stringa = “WebMasterPoint.org, il punto di riferimento per i webmaster italiani”;
# passiamo per copia il valore di stringa alla funzione tagliaStringa();
$risultato = tagliaStringa($stringa);
# stampiamo il valore di $risultato
echo $risultato;
?>
Ora provate a sostituire il valore della variabile stringa
con “prova” (senza le virgolette!!).
Passiamo ora al secondo livello di difficoltà.
Perché non fare in modo che la variabile maxCaratteri
sia settata per default a 10 ma, nel caso sia specificato
come valore di ingresso della funzione, assumi il valore
passato?
Quale utilità potrebbe avere questa modifica? Provate
a pensarci un pò. Supponete di avere due celle una
più grande dell’altra. La prima richiama le news
dal database e mantiene la corretta formattazione fino a 15
caratteri (esclusi gli eventuali tre puntini finali) e la
seconda mantiene la corretta formattazione fino a 8
caratteri. Cosa fare?
Molti programmatori alle prime armi sarebbero tentati a fare
una copia della funzione tagliaStringa() e chiamarla,
perché no, tagliaStringa2(); la prima funzione ha
settata la variabile maxCaratteri a 15 mentre la seconda ha
settata la variabile maxCaratteri a 8.
Certo è giusto sintatticamente parlando ma non per
quanto riguarda una corretta programmazione funzionale.
Perché fare due funzioni che svolgono lo stesso lavoro
quando se ne può fare solo una?
Il codice.
function tagliaStringa($testo, $maxCaratteri = 10) {
# SCRIPT
# salvo il numero di caratteri della stringa passata
$caratteri = strlen($testo);
# controllo se $caratteri è maggiore di $maxCaratteri
if($caratteri > $maxCaratteri) {
return substr($testo, 0, $maxCaratteri)."...";
} else {
return $testo;
}
}
?>
Esaminiamo la funzione.
Come potete vedere abbiamo eliminato tutta questa parte di
codice:
# CONFIGURAZIONE
# imposto il numero massimo di caratteri da visualizzare
# esclusi i (...) finali
$maxCaratteri = 10;
Quindi non viene più assegnato il valore 10 alla
variabile maxCaratteri all’interno della funzione,
bensì il valore della variabile viene passato per
copia alla funzione in questo modo:
function tagliaStringa($testo, $maxCaratteri = 10)
Come potete vedere la variabile $testo è obbligatoria
mentre la variabile $maxCaratteri è facoltativa. Se
viene specificato assume il valore desiderato altrimenti
assume il valore 10 (valore di default)
Vediamo ora come richiamare questa nostra nuova funzione.
# assegniamo la stringa alla variabile $stringa
$stringa = “WebMasterPoint.org, il punto di riferimento per i webmaster italiani”;
# passiamo per copia il valore di stringa alla funzione tagliaStringa();
$risultato = tagliaStringa($stringa);
# stampiamo il valore di $risultato
echo $risultato;
?>
Provate a eseguire questo. E’ visibilmente uguale a quello usato prima; infatti restituisce anche lo stesso risultato, cioè restituisce i primi 10 caratteri seguiti dai tre puntini. Provate ora a scrivere questo:
# assegniamo la stringa alla variabile $stringa
$stringa = “WebMasterPoint.org, il punto di riferimento per i webmaster italiani”;
# passiamo per copia il valore di stringa alla funzione tagliaStringa();
$risultato = tagliaStringa($stringa, 3);
# stampiamo il valore di $risultato
echo $risultato;
?>
Questa volta abbiamo aggiunto un nuovo parametro alla
funzione. Si tratta del secondo parametro, che viene salvato
nella variabile $maxCaratteri. Così facendo diciamo al
nostro script di stampare solo le prime due lettere della
stringa, seguite dai tre puntini.
Se avete problemi a far funzionare questo script non esitate
a postare nel nuovo forum di webmasterpoint.org nella sezione
PHP.