Tutto sulle stringhe in PHP

20 marzo 2006

Con PHP risulta molto semplice manipolare le stringhe, in parte per le caratteristiche del linguaggio dotato, come è noto, di una sintassi semplice, snella e compatta. In parte per la disponibilità di una vasta libreria di funzioni che permette di svolgere con facilità le più comuni come le più complesse elaborazioni.

In questo articolo si introdurranno i concetti basilari relativi alle stringhe, per poi passare ad illustrare alcune tra le numerose funzioni, soprattutto nell’ottica dello sviluppo di applicazioni web. Gli argomenti trattati si rivolgono principalmente a chi da poco si è avvicinato a PHP, malgrado ciò qualche spunto interessante potranno trovarlo anche i programmatori un po’ più esperti. L’obiettivo è fornire una breve panoramica degli strumenti messi a disposizione dal linguaggio per scrivere codice efficiente ed elegante senza “reinventare l’acqua calda”.

Definire le stringhe

Con il termine stringa si intende una sequenza di caratteri: "web", "consulta freephp.html.it", "PHP rende la vita facile ai programmatori", sono semplici esempi di stringhe. Per assegnare ad una variabile un valore di tipo stringa dobbiamo utilizzare dei delimitatori che consentano di racchiudere la sequenza di caratteri desiderata. La sintassi del linguaggio fornisce varie alternative, ciascuna con proprie particolarità.

Come primo approccio possiamo delimitare la stringa mediante virgolette doppie ("):

<?php
$stringa = "Naviga su html.it";

// posso anche andare a capo
$stringa1 = "Naviga su html.it lo troverai interessante";
?>

Quando si adotta questa sintassi PHP analizza il contenuto della stringa alla ricerca di nomi di variabile individuati dal simbolo $; qualora ne trovi uno lo sostituisce automaticamente con il corrispondente valore. Questa caratteristica prende il nome di espansione dei nomi di variabile. Il codice seguente esemplifica quanto descritto:

<?php
$sito = "html.it";

// la variabile $stringa conterrà 
// la stringa "Naviga su html.it"
$stringa = "Naviga su $sito";

// posso utilizzare anche la componente di un array
$arraysito[0]= "html.it";
$stringa1 = "Naviga su $arraysito[0]";
?>

Si osservi che l’automatismo della sostituzione necessita di alcuni accorgimenti se la variabile all’interno della stringa è un array associativo o bidimensionale:

<?php
$sito["nome"] = "html.it";

// la successiva assegnazione genererà un errore
$stringa1 = "Naviga su $sito["nome"]";

// anche questa assegnazione genererà un errore
$stringa2 = "Naviga su $sito['nome']";

// questa assegnazione funziona correttamente
$stringa3 = "Naviga su $sito[nome]";

// si può ricorrere alle parentesi graffe
// anche questa assegnazione funziona
$stringa4 = "Naviga su {$sito['nome']}";

// anche la variabile $stringa5 conterrà la stringa
// corretta "Naviga su html.it "
$stringa5 = "Naviga su " .$sito["nome"];

$sito[4][1] = "html.it";

// la variabile $stringa6 conterrà la stringa
// errata "Naviga su Array[1]"
$stringa6 = "Naviga su $sito[4][1]";

// la successiva variabile conterrà la stringa
// corretta "Naviga su html.it "
$stringa7 = "Naviga su " .$sito[4][1];

// anche la successiva variabile conterrà la stringa corretta 
$stringa8 = "Naviga su {$sito[4][1]}";
?>

Come si può notare nel caso della variabile $stringa3, la componente di un array associativo all’interno di una stringa non va specificata mediante virgolette doppie o singole.

Questo modo di procedere si contrappone alle usuali regole di buona scrittura del codice indicate nella documentazione ufficiale. In alternativa si può ricorrere all’utilizzo delle parentesi graffe ovvero alla cosiddetta sintassi complessa, come nel caso delle variabili $stringa4 e $stringa8 dell’esempio precedente. Il nome deriva non tanto dalla sua difficoltà di utilizzo, quanto dalla possibilità di inserire espressioni complesse come se si fosse all’esterno della stringa, per maggiori dettagli si rimanda alla documentazione ufficiale.

Infine nel caso delle variabili $stringa5 e $stringa7 si è fatto ricorso all’operatore di concatenazione, ovvero il punto (.), che permette di unire più stringhe. Il successivo esempio ne rende più chiaro l’utilizzo:

<?php
$uno = "Naviga";
$due = "su";
$tre = "html.it";

// la variabile $stringa conterrà la
// stringa "Naviga su html.it "
$stringa = $uno. " " .$due. " " .$tre;
?>

Utilizzando l’operatore .= è possibile effettuare concatenazione ed assegnazione in un unica istruzione.

<?php
$stringa = "Naviga su ";

//sintassi classica
$stringa = $stringa. "html.it";

//sintassi abbreviata
$stringa .= "html.it";
?>

Se all’interno della stringa vogliamo inserire le virgolette doppie ("), il carattere di backslash (\), o il simbolo del dollaro ($) dobbiamo effettuarne il cosiddetto escape. Sarà necessario, cioè, far precedere tali simboli dalla backslash così: \", \\, \$, in caso contrario potremmo ottenere un messaggio d’errore. È anche possibile inserire alcuni caratteri speciali quali linefeed (new line), \n, carriage return, \r, o tab, \t.

<?php
$stringa = "Egli disse:\"Naviga su html.it!\"";
$stringa1 = "Adesso vado a capo.\nQui sono alla riga successiva.";
?>

In alternativa PHP prevede che le stringhe possano essere racchiuse tra virgolette singole ('). Con questa sintassi non viene effettuata la sostituzione delle variabili con il corrispondente valore.

<?php
$sito = 'html.it';
// la variabile conterrà la stringa "Naviga su $sito"
$stringa1 = 'Naviga su $sito';

// la variabile conterrà la stringa "Naviga su html.it"
$stringa2 = 'Naviga su ' .$sito;
?>

I caratteri che in questo caso devono essere preceduti da backslash sono le virgolette singole, \' e la backslash stessa, \\.

<?php
// l'assegnazione seguente è corretta
$stringa1 = 'Egli disse:"L\'importante è navigare su html.it"';

// non è possibile usare caratteri speciali
$stringa2 = 'Il carattere di new line \n non verrà considerato, ma stampato tale e quale';
?>

heredoc

L’ultima sintassi disponibile è quella dei cosiddetti “documenti here” (heredoc). Le stringhe in questo caso sono delimitate inizialmente da tre simboli di minore seguiti da un identificatore, ad esempio <<<DH. La chiusura si ottiene mediante il medesimo identificatore seguito da punto e virgola, DH;.

Il principale vantaggio di questa rappresentazione è che le variabili vengono sostituite con il corrispondente valore e le virgolette doppie non necessitano di escape. Risulta molto utile, ad esempio, per stampare dei form evitando il continuo ricorso a backslash nell’inserimento di attributi dei tag HTML.

<?php
$sito = "html.it";
// la seguente variabile conterrà la stringa "Naviga su html.it"
$stringa = <<<DH
Naviga su $sito
DH;

// ecco come costruire un form
$form = <<<DH
<form method="post" action="reciver.php">
<input type="text" name="testo" value="">
<input type="submit" name="invia" value="invia">
</form>
DH;
?>

Se vuoi aggiornamenti su Tutto sulle stringhe in PHP inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Tutto sulle stringhe in PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy