PHP è uno dei linguaggi di pro­gram­ma­zio­ne più comuni per la pro­gram­ma­zio­ne lato server. Con il passare del tempo, è diventato una parte in­di­spen­sa­bi­le di buona parte dei moderni siti web e delle tec­no­lo­gie internet. Ma imparare questo lin­guag­gio può essere una grande sfida per chi è alle prime armi. Con questo tutorial su PHP ti mostriamo le basi di questo popolare lin­guag­gio di pro­gram­ma­zio­ne, compresi i suoi operatori, i cicli e le funzioni più im­por­tan­ti.

Tutorial PHP: una guida completa

Il nostro tutorial si rivolge prin­ci­pal­men­te a chi è neofita. Per alcuni esempi, tuttavia, è utile avere una co­no­scen­za di base dello sviluppo web moderno e del lin­guag­gio HTML. I requisiti per ri­pro­dur­re gli esempi il­lu­stra­ti in questo articolo sul tuo computer sono i seguenti:

  • Un server web con in­ter­pre­te PHP
  • Avere in­stal­la­to PHP
  • Un browser web
  • Un editor di testo

Come server, con­si­glia­mo l’ambiente di test locale XAMPP, fornito gra­tui­ta­men­te da Apache Friends per i sistemi operativi Windows, Linux e macOS. XAMPP è un server di test puro. Il pacchetto software offre la pos­si­bi­li­tà di con­fi­gu­ra­re un ambiente di test completo per script, pagine HTML e fogli di stile in po­chis­si­mo tempo. Tuttavia, il fun­zio­na­men­to sicuro come server web su internet non è garantito. Le istru­zio­ni det­ta­glia­te per l’in­stal­la­zio­ne sono di­spo­ni­bi­li nel nostro tutorial su XAMPP.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana

Basi di PHP: la sintassi del lin­guag­gio di scripting

Una volta con­fi­gu­ra­to il server web locale, ad esempio uti­liz­zan­do XAMPP, è opportuno ve­ri­fi­ca­re se PHP è stato in­stal­la­to cor­ret­ta­men­te ed è pronto a eseguire gli script. Gli script sono programmi che non vengono pre­ven­ti­va­men­te compilati in codice binario, ma vengono eseguiti da un in­ter­pre­te. Aprendo il tuo editor di testo preferito, puoi creare il seguente script PHP:

<?php
phpinfo();
?>
php
Immagine: Codice PHP in un editor di testo
Uno strumento come Notepad++ offre un supporto alla pro­gram­ma­zio­ne grazie all’evi­den­zia­zio­ne della sintassi.

Gli script PHP sono sempre strut­tu­ra­ti secondo lo stesso schema. Il tag PHP di apertura <?php indica che si sta avviando un ambiente di script. A questo segue il codice PHP vero e proprio, sotto forma di istru­zio­ni. Nell’esempio, si tratta dell’istru­zio­ne alla funzione phpinfo(). La maggior parte delle funzioni PHP richiede uno o più parametri racchiuso tra parentesi tonde; per phpinfo() questi sono opzionali: phpinfo( INFO_ALL ). Ogni istru­zio­ne termina con un punto e virgola (;). Per chiudere l’ambiente di script, si usa il tag PHP di chiusura: ?>.

De­fi­ni­zio­ne

Le funzioni sono sot­to­pro­gram­mi che con­sen­to­no di ester­na­liz­za­re parti del codice del programma. Per evitare la ri­don­dan­za, i compiti ri­cor­ren­ti possono essere definiti come una funzione e poi ri­chia­ma­ti usando il relativo nome. Chi lavora nello sviluppo web utilizza le funzioni PHP pre­de­fi­ni­te o crea i propri sot­to­pro­gram­mi.

Salva il file di testo con il nome test in formato .php (script PHP) e avvia il tuo server web. Se stai uti­liz­zan­do l’ambiente di test XAMPP, salva test.php nella directory XAMPP sotto htdocs (C:\xampp\htdocs).

Ora puoi accedere al file di esempio tramite il seguente URL nel browser web: http://localhost/test.php. Se stai uti­liz­zan­do un server web diverso o una con­fi­gu­ra­zio­ne in­di­vi­dua­le del software XAMPP, seleziona l’URL in base al ri­spet­ti­vo percorso del file.

Digitando l’URL http://localhost/test.php richiedi al browser il file test.php dal server web. Il server HTTP Apache o il software del server web uti­liz­za­to re­cu­pe­re­rà il file nella giusta directory. L’esten­sio­ne .php informa che il file contiene codice PHP. A questo punto entra in funzione l’in­ter­pre­te PHP integrato nel server web. Esso esamina il documento e incontra il tag PHP di apertura <?php, il quale segna l’inizio del codice PHP. L’in­ter­pre­te è in grado di eseguire il codice PHP e di generare l’output HTML che viene inviato dal server web al browser web.

Se l’in­stal­la­zio­ne è andata a buon fine, ora dovresti poter vedere la seguente pagina web come risultato dell’ese­cu­zio­ne dello script:

Immagine: La funzione PHP phpinfo()
Eseguendo uno script con la funzione *phpinfo()*, il browser vi­sua­liz­za le in­for­ma­zio­ni sulla con­fi­gu­ra­zio­ne PHP.

La funzione phpinfo() è la forma breve del valore standard phpinfo( INFO_ALL ). Essa fornisce in­for­ma­zio­ni det­ta­glia­te sulla con­fi­gu­ra­zio­ne PHP del server web. Qualora non sia possibile trovare alcuna versione di PHP, il browser web vi­sua­liz­ze­rà un messaggio di errore oppure il codice PHP verrà con­se­gna­to al browser senza che questo sia in grado di in­ter­pre­tar­lo.

“Hello World!”: come creare un output di testo tramite echo

Una volta che l’in­stal­la­zio­ne di PHP è andata a buon fine, è il momento di scrivere il primo script. L’istru­zio­ne PHP echo si presta bene a questo scopo. Di­ver­sa­men­te da phpinfo(), echo non è una funzione. Si tratta piuttosto di un costrutto lin­gui­sti­co che consente di produrre una stringa suc­ces­si­va come testo.

De­fi­ni­zio­ne

I costrutti lin­gui­sti­ci sono istru­zio­ni uti­liz­za­te in PHP per con­trol­la­re il processo di pro­gram­ma­zio­ne. Oltre a echo, i costrutti lin­gui­sti­ci includono istru­zio­ni come if, for, do, include, return, exit o die. A dif­fe­ren­za delle funzioni, quindi, in questo caso non sono ne­ces­sa­rie le parentesi.

Crea un nuovo file PHP per il tuo primo script e scrivici il seguente codice:

<?php
echo 'Hello World!';
?>
php

Il tag di apertura <?php apre un ambiente di script. Seguono il costrutto lin­gui­sti­co echo e la stringa Hello World! racchiusa in vir­go­let­te singole. Per terminare lo script, è ne­ces­sa­rio il tag ?>. At­ten­zio­ne al punto e virgola dopo l’istru­zio­ne. Al posto di Hello World! puoi scrivere qualsiasi testo.

Salva lo script come hello.php nella cartella htdocs del server web e apri il file tramite l’URL http://localhost/hello.php sul browser web. Se il codice è stato tra­sfe­ri­to cor­ret­ta­men­te, nella finestra del browser dovrebbe apparire la stringa uti­liz­za­ta:

Immagine: Output di testo con il costrutto linguistico echo
Il costrutto lin­gui­sti­co echo istruisce il server web a emettere la stringa Hello World!.

Qualsiasi testo emesso con echo può essere con­tras­se­gna­to con tag HTML, se ne­ces­sa­rio. Questi tag vengono poi in­ter­pre­ta­ti dal browser web in base alle spe­ci­fi­che HTML. Fai una prova, ad esempio con il seguente script:

<?php
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Quando viene vi­sua­liz­za­to nel browser web, il risultato dell’ese­cu­zio­ne dello script appare come segue.

Immagine: Risultato dell’esecuzione di uno script con tag HTML
Se il risultato dell’ese­cu­zio­ne dello script contiene tag HTML, il browser web li in­ter­pre­ta au­to­ma­ti­ca­men­te.

La stringa Hello World! compresa nei tag <h1> viene in­ter­pre­ta­ta dal browser web come un titolo di primo ordine. È seguita da un’in­ter­ru­zio­ne di riga au­to­ma­ti­ca e dal paragrafo di testo <p>.

A seconda delle esigenze, echo può essere usato con vir­go­let­te singole () o doppie (). Se vogliamo emettere solo testo, non fa alcuna dif­fe­ren­za la scelta delle vir­go­let­te. Ma le cose cambiano quando entrano in gioco le variabili PHP.

Le variabili

Il costrutto lin­gui­sti­co echo è molto più di un semplice output di testo. Infatti, può essere im­ple­men­ta­to ef­fi­ca­ce­men­te anche senza PHP, su una base di HTML. Il vero valore aggiunto di echo si basa sul fatto che l’istru­zio­ne consente di generare testo di­na­mi­ca­men­te con l’aiuto di variabili.

L’utente PHP in­con­tre­rà variabili nella forma seguente, ad esempio: &example.

Ciascuna variabile è co­sti­tui­ta dal simbolo del dollaro ($) seguito dal nome della variabile. Le variabili sono uti­liz­za­te negli script PHP per includere dati esterni nelle pagine web. Possono essere valori di vario tipo, da semplici numeri e stringhe a testi interi o strutture di documenti HTML.

Il PHP distingue sette tipi di variabili:

Tipo di variabile De­scri­zio­ne
String Una stringa è un insieme di caratteri. Può essere una parola, una frase, un testo o l’intero codice HTML di una pagina web.
Integer Un integer è un numero intero senza cifre decimali. Può essere positivo o negativo.
Float Un float è un numero in virgola mobile, cioè un valore numerico con cifre decimali. Nei linguaggi di pro­gram­ma­zio­ne, il punto decimale è scritto come un punto (.). PHP supporta fino a 14 cifre decimali.
Boolean Le variabili booleane sono il risultato di un’ope­ra­zio­ne logica e pre­sen­ta­no solo due valori: TRUE (vero) e FALSE (falso). Questo tipo di variabile viene uti­liz­za­to, ad esempio, per lavorare con le con­di­zio­ni.
Array Un array è una variabile che può contenere diversi elementi. È quindi un rag­grup­pa­men­to di diversi dati strut­tu­ra­ti in modo simile che sono stati combinati in un array.
Object Il tipo di variabile object consente a chi programma di definire i propri tipi di dati. Viene uti­liz­za­to nella pro­gram­ma­zio­ne orientata agli oggetti. Nel nostro tutorial PHP per prin­ci­pian­ti, le variabili di tipo object sono state escluse.
NULL Il valore NULL rap­pre­sen­ta una variabile senza valore, l’unico valore possibile per le variabili di tipo NULL.

La gestione cen­tra­liz­za­ta dei contenuti viene so­li­ta­men­te ef­fet­tua­ta con l’aiuto di sistemi di database. È tuttavia possibile definire i valori delle variabili anche di­ret­ta­men­te nello script. Questo tipo di as­se­gna­zio­ne avviene secondo il seguente schema:

$example = "value";
php

Il ca­rat­te­ri­sti­co simbolo del dollaro è seguito dal nome della variabile (in questo caso example). A ciò si aggiunge il simbolo di uguale (=) con un valore racchiuso tra doppie vir­go­let­te. I valori delle variabili di tipo integer e float sono indicati senza vir­go­let­te (ad esempio, $example = 24; o &example = 2,7;).

PHP offre la libertà di nominare le variabili come meglio si crede. Tuttavia, si applicano le seguenti re­stri­zio­ni:

  • Ogni variabile deve iniziare con il simbolo del dollaro.
  • Il nome di una variabile è una suc­ces­sio­ne di caratteri a pia­ci­men­to composta da lettere, numeri e trattini bassi (ad esempio &example_1).
  • Il nome di una variabile valido inizia sempre con una lettera o un trattino basso (&example1 o $_example), mai con una cifra (errato: $example).
  • Il PHP è case sensitive. Il lin­guag­gio di scripting fa quindi di­stin­zio­ne tra lettere maiuscole e minuscole (&example ≠ &example).
  • Il nome di una variabile non deve contenere spazi o in­ter­ru­zio­ni di riga (errato: &example 1).
  • Le stringhe riservate da PHP per altri scopi non possono essere uti­liz­za­te come variabili definite dall’utente (ad esempio, $this).

Ap­pro­fon­dia­mo quest’ultimo punto con un esempio:

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
?>
php

Il tag PHP di apertura è seguito dalla de­fi­ni­zio­ne della variabile: per $author deve essere uti­liz­za­to il valore John Doe. Quando lo script viene eseguito, la variabile $author viene so­sti­tui­ta dal valore John Doe ogni volta che viene men­zio­na­ta nell’ambiente di script. Nell’immagine seguente vediamo come si pre­sen­te­reb­be il browser web.

Immagine: Creazione dinamica di testo con variabili
Come risultato dell’ese­cu­zio­ne dello script, alla variabile $author è stato assegnato il valore John Doe.

Se c’è un errore e la pagina web non proviene da John Doe, ma dal suo collega Max Mu­ster­mann, per risolvere il problema è suf­fi­cien­te mo­di­fi­ca­re la variabile con il nome $author.

Immagine: Creazione di un testo dinamico mediante variabili
Nella variabile $author è stato inserito il valore Max Mu­ster­mann.

Ciò si rivela par­ti­co­lar­men­te efficace quando una variabile ricorre più volte all’interno di uno script. In tal caso, la cor­re­zio­ne deve essere ef­fet­tua­ta solo in un singolo punto: dove viene definito il valore della variabile.

È qui che la forza di PHP diventa evidente: i contenuti possono essere in­cor­po­ra­ti come variabili. È questa la ca­rat­te­ri­sti­ca alla base dello sviluppo web dinamico. Di­ver­sa­men­te dalle pagine web statiche, già di­spo­ni­bi­li come pagine HTML pronte all’uso, le pagine web dinamiche vengono create soltanto nel momento in cui la pagina viene con­sul­ta­ta. L’in­ter­pre­te PHP carica i singoli elementi della pagina web richiesta da vari database con l’aiuto delle variabili e li assembla in una pagina HTML per­so­na­liz­za­ta secondo la richiesta.

I vantaggi di questo concetto di design sono palesi: se alcuni elementi del sito web (ad esempio nel footer) vengono mo­di­fi­ca­ti, non occorre apportare le modifiche ma­nual­men­te su ogni singola sot­to­pa­gi­na del progetto web. Piuttosto, basterà ag­gior­na­re la voce cor­ri­spon­den­te nel database. Così, la revisione viene applicata au­to­ma­ti­ca­men­te a tutte le pagine web che includono i dati cor­ri­spon­den­ti come variabili.

Se una variabile viene definita più volte all’interno di uno script, la nuova de­fi­ni­zio­ne so­vra­scri­ve la pre­ce­den­te. Un elemento echo suc­ces­si­vo re­sti­tui­sce sempre il valore corrente di una variabile.

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
$author = "Max Mustermann";
echo " <p>Supported by $author.</p>";
?>
php
Immagine: La sovrascrizione delle variabili
Il valore John Doe viene so­vra­scrit­to con il valore Max Mu­ster­mann.

Nell’esempio di codice, il valore John Doe viene prima assegnato alla variabile $author e poi so­sti­tui­to con il valore Max Mu­ster­mann.

Passiamo ora alle vir­go­let­te. A dif­fe­ren­za delle stringhe, le variabili singole non devono essere racchiuse tra vir­go­let­te:

<?php
$author = "John Doe";
echo $author;
?>
php

Questo è vero a meno che la variabile non debba essere uti­liz­za­ta all’interno di una stringa. In tal caso, infatti, va usata una doppia vir­go­let­ta (), che segnala all’in­ter­pre­te PHP di cercare nella stringa le variabili che po­treb­be­ro dover essere so­sti­tui­te dai valori a esse associati. Le stringhe racchiuse tra vir­go­let­te singole () vengono in­ter­pre­ta­te e rese come in­for­ma­zio­ni di testo semplice, anche se si tratta di variabili.

<?php
$author = "John Doe";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>';
?>
php
Immagine: Output di testo puro in caso di virgolette singole
Le vir­go­let­te singole portano a un output di testo semplice, pertanto le variabili non vengono in­ter­pre­ta­te.

Forse ti starai chiedendo cosa succede se ometti del tutto le vir­go­let­te. In questo caso, PHP segnala un errore sin­tat­ti­co.

Messaggi di errore e ma­sche­ra­men­to

Se si ve­ri­fi­ca­no errori sin­tat­ti­ci, il codice PHP non risulta valido per cui l’in­ter­pre­te PHP emette un messaggio di errore. Può capitare, ad esempio, quando l’istru­zio­ne echo viene uti­liz­za­ta con una stringa senza vir­go­let­te:

<?php
echo Hello World!;
?>*
php

Nella maggior parte dei casi, i messaggi di errore con­ten­go­no in­for­ma­zio­ni sul punto in cui si è ve­ri­fi­ca­to l’errore e for­ni­sco­no quindi im­por­tan­ti in­di­ca­zio­ni per la sua ri­so­lu­zio­ne.

Immagine: Browser web con un messaggio di errore: parse error (errore di analisi)
Il messaggio di errore evidenzia errori sin­tat­ti­ci nel codice del programma

Nell’esempio presente, è stato rilevato un errore nella riga 2 del codice del programma, proprio dove abbiamo omesso le vir­go­let­te a scopo di­mo­stra­ti­vo.

Gli errori sin­tat­ti­ci si ve­ri­fi­ca­no anche quando vogliamo produrre come testo dei caratteri che sono associati a un’attività specifica in PHP. Un esempio è l’apostrofo (). Caratteri di questo tipo possono essere vi­sua­liz­za­ti come testo in PHP solo a con­di­zio­ne che si chiarisca all’in­ter­pre­te che il carattere è stato esonerato dal suo compito effettivo. Nel caso dell’apostrofo, hai a di­spo­si­zio­ne due opzioni: rac­chiu­de­re una stringa con apostrofo in doppie vir­go­let­te o ma­sche­ra­re le vir­go­let­te mediante barre ro­ve­scia­te (\):

<?php
echo '\'Hello World!\' ';
?>
php
Immagine: Usare la barra rovesciata come carattere di mascheramento
Ma­sche­ran­do i caratteri con una barra ro­ve­scia­ta vengono privati della loro funzione secondo la sintassi PHP.

È possibile anche la com­bi­na­zio­ne di vir­go­let­te singole e doppie:

<?php
echo " 'Hello World!' ";
?>
php

Tuttavia, non è ammessa la seguente scrittura:

<?php
echo ' 'Hello World!' ';
?>
php

Gli spazi tra le vir­go­let­te sono stati inseriti negli esempi per fa­ci­li­ta­re la lettura.

Operatori di con­ca­te­na­zio­ne

Se in uno script PHP vogliamo produrre con­tem­po­ra­nea­men­te diverse variabili, possiamo im­ple­men­ta­re questo metodo come abbiamo imparato finora:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author1 and $author2.</p>";
?>
php

È suf­fi­cien­te scrivere entrambe le variabili insieme al resto del testo da produrre nella stringa racchiusa tra doppie vir­go­let­te. PHP riconosce au­to­ma­ti­ca­men­te le variabili dal simbolo del dollaro ($) e inserisce i valori cor­ri­spon­den­ti.

Immagine: Output di testo con due variabili
Le variabili nella stringa possono essere accettate da PHP solo se lo script non contiene funzioni.

Tra le persone che si occupano di pro­gram­ma­zio­ne, tuttavia, una procedura di questo tipo è con­si­de­ra­ta un lavoro poco pulito. Il dogma è che le variabili non devono far parte della stringa. Una delle ragioni è che molti linguaggi di pro­gram­ma­zio­ne pre­scri­vo­no questa se­pa­ra­zio­ne. Ma so­prat­tut­to, anche PHP richiede la se­pa­ra­zio­ne tra stringa e variabile quando si lavora con funzioni o variabili più complesse. Per questo motivo, è con­si­glia­bi­le im­ple­men­ta­re questa se­pa­ra­zio­ne in modo coerente anche nell’output di testo semplice, anche se in questo caso non sarebbe stret­ta­men­te ne­ces­sa­rio.

Se lavoriamo con le variabili, dobbiamo sempre avere a che fare con diversi elementi che devono essere collegati tra loro per l’output. In PHP, a questo scopo si utilizza l’operatore di con­ca­te­na­zio­ne (.).

Se è stato pro­gram­ma­to in modo “pulito”, il codice dell’esempio pre­ce­den­te dovrebbe essere simile a questo:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by ' . $author1 . ' and ' . $author2 . '.</p>';
?>
php
Immagine: Collegare stringhe e variabili con gli operatori di concatenazione
Gli operatori di con­ca­te­na­zio­ne collegano stringhe e variabili.

Si tratta quindi di tre stringhe e due variabili che vengono con­ca­te­na­te per formare una stringa.

String1 Variable1 String2 Variable2 String3
’&lt;h1>Hello World!&lt;/h1>
&lt;p>This dynamic web page was created by ’
. $author1 . ’ and ’ . $author2 . ’.&lt;/p>’

Si noti che l’operatore di con­ca­te­na­zio­ne unisce stringhe o variabili senza spazi. Se desideri ag­giun­ge­re uno spazio, devi inserirlo all’interno delle vir­go­let­te nella stringa, come nell’esempio.

L’operatore di con­ca­te­na­zio­ne viene uti­liz­za­to nella pro­gram­ma­zio­ne non solo per collegare stringhe e variabili per l’output di testo, ma anche per estendere le variabili. L’esempio seguente mostra come funziona:

<?php
&example = 'Hello';
&example .= 'World';
echo &example;
?>
php

Per estendere il valore di una variabile, de­fi­ni­sci­la di nuovo, ma metti l’operatore di con­ca­te­na­zio­ne punto (.) davanti al simbolo di uguale. Si tratta in questo caso dellascrittura ab­bre­via­ta usuale per &example = &example . ‘World’.

PHP ag­giun­ge­rà il nuovo valore a quello definito in pre­ce­den­za. Se desideri uno spazio tra i due valori, scrivilo alla fine della prima stringa, come nell’esempio.

Immagine: Estensione del valore di una variabile
La stringa Hello viene estesa a Hello World.

Come in­cor­po­ra­re PHP in HTML

So­stan­zial­men­te, l’in­ter­pre­te PHP è in­te­res­sa­to solo al codice che si trova tra un tag PHP di apertura e uno di chiusura:

<?php [Solo questa area viene analizzata dall’interprete PHP] ?>

Tutte le altre sezioni del documento vengono ignorate dall’in­ter­pre­te e passate al server web così come sono. Il codice PHP può quindi essere integrato nei documenti HTML a piacere, ad esempio per creare un template per un sistema di gestione dei contenuti. È im­por­tan­te ac­cer­tar­si che i documenti HTML con­te­nen­ti codice PHP siano salvati come file PHP. Al­tri­men­ti, il documento non verrà pre­pro­ces­sa­to dall’in­ter­pre­te PHP, ma con­se­gna­to di­ret­ta­men­te al browser web, con il risultato che il codice del programma apparirà sul sito web sotto forma di testo.

Si può quindi pensare all’in­ter­pre­te PHP come al collega pigro del server web, che lavora solo quando gli viene chiesto espli­ci­ta­men­te di farlo, ad esempio tramite un tag PHP di apertura.

Se vogliamo combinare HTML e PHP, scriviamo la nostra pagina HTML come di consueto secondo la struttura classica del documento e sal­via­mo­la con l’esten­sio­ne .php:

<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
        <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    </body>
</html>
html

Ag­giun­gia­mo ora uno script PHP al documento HTML. As­si­cu­ra­ti che l’intero codice del programma sia all’interno dei tag PHP.

<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
    <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    <p>Your current time and date is: 
    <?php 
    echo date("d.m.Y H:i:s");
    ?>.</p>
    </body>
</html>
html

Nell’esempio, abbiamo combinato il costrutto lin­gui­sti­co echo con la funzione PHP date() per mostrare la data e l’ora corrente come testo sul lato server. Il parametro della funzione specifica il formato de­si­de­ra­to sotto forma di stringa:

d.m.Y H:i:s = giorno.mese.anno ora:minuto:secondo

Se un file di questo tipo viene richiesto da un browser web, l’in­ter­pre­te PHP esegue prima lo script e scrive l’ora corrente come testo nel documento HTML. Questo viene poi con­se­gna­to dal server web e vi­sua­liz­za­to come pagina web nel browser.

Immagine: Integrazione di PHP in HTML
Il documento HTML contiene uno script PHP integrato che vi­sua­liz­za la data e l’ora corrente.

La funzione di commento di PHP

Come il codice HTML, anche PHP può essere com­men­ta­to a piacere. I commenti nel codice sorgente vengono ignorati dall’in­ter­pre­te PHP, a con­di­zio­ne che siano stati marcati ri­spet­tan­do la sintassi. Il lin­guag­gio di scripting fornisce tre diverse al­ter­na­ti­ve a questo scopo.

Se vuoi con­tras­se­gna­re un’intera riga come commento e quindi esclu­der­la dall’in­ter­pre­ta­zio­ne, puoi servirti dell’hashtag (#) o di due barre oblique (//) con­se­cu­ti­ve. Nell’esempio di codice seguente sono state uti­liz­za­te entrambe le opzioni:

<?php
#This is a single-line comment!
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
//This is also a single-line comment!
?>
php

L’editor di testo Notepad++ evidenzia i commenti in verde. A dif­fe­ren­za dei commenti HTML, i passaggi di testo con­tras­se­gna­ti come commenti nell’ambiente di script non arrivano nemmeno sul browser web, perché vengono già ignorati dall’in­ter­pre­te PHP durante l’ese­cu­zio­ne dello script.

Immagine: Commenti a riga singola
Le righe con­tras­se­gna­te come commenti non sono visibili nell’output.

Inoltre, è possibile inserire commenti che si estendono su più righe. A tale scopo, con­tras­se­gna l’inizio di una sezione di commento con una barra obliqua seguita da un asterisco (/*) e la fine con un asterisco seguito da una barra obliqua (*/).

<?php
/*
This is a multiple-lines comment block
that spans over multiple
lines
*/
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Anche i commenti con­tras­se­gna­ti in questo modo non vengono presi in con­si­de­ra­zio­ne dall’in­ter­pre­te e quindi non compaiono sul sito web.

Immagine: Esempio di commento su più righe
I commenti su più righe scom­pa­io­no nell’output.

Chi programma ricorre ai commenti per strut­tu­ra­re il codice sorgente dei propri script, lasciare appunti per una suc­ces­si­va modifica o ag­giun­ge­re in­for­ma­zio­ni interne alla creazione, come l’autrice o l’autore e la data.

I commenti sono fa­col­ta­ti­vi e do­vreb­be­ro essere uti­liz­za­ti con par­si­mo­nia per garantire una buona leg­gi­bi­li­tà del codice sorgente.

Calcolo con le variabili

In questo tutorial dedicato al lin­guag­gio PHP abbiamo già in­con­tra­to le variabili. A queste sono stati assegnati prin­ci­pal­men­te valori string (cioè stringhe di caratteri). Ora ci oc­cu­pe­re­mo di variabili che rap­pre­sen­ta­no integer o float.

Se le variabili me­mo­riz­za­no valori numerici, PHP offre la pos­si­bi­li­tà di eseguire calcoli con esse. Co­min­cia­mo con la semplice addizione di due numeri interi:

<?php
$number1 = 237;
$number2 = 148;
$result = $number1 + $number2;
echo "result: " . $result;
?>
php

Per prima cosa as­se­gnia­mo i numeri interi 237 e 148 alle variabili $number1 e $number2 e poi definiamo una variabile $result. Questa variabile ha lo scopo di me­mo­riz­za­re la somma delle variabili $number1 e $number2. Per farlo, ci serviamo dell’operatore arit­me­ti­co +(più). Infine, il risultato dell’addizione viene vi­sua­liz­za­to come testo uti­liz­zan­do il costrutto lin­gui­sti­coecho. Non è ne­ces­sa­rio usare le vir­go­let­te quando si assegnano valori numerici alle variabili.

Immagine: Addizione di numeri interi con l’aiuto di uno script PHP
Il risultato dell’addizione verrà vi­sua­liz­za­to sotto forma di testo sul browser.

Il seguente esempio di codice mostra una selezione di calcoli ma­te­ma­ti­ci ef­fet­tua­bi­li lato server con PHP. Gli operatori PHP uti­liz­za­ti cor­ri­spon­do­no per lo più ai simboli ma­te­ma­ti­ci stan­dar­diz­za­ti.

Operatore arit­me­ti­co Ope­ra­zio­ne Risultato
$number1 + $number2 Addizione Somma di $number1 e $number2
$number1 - $number2 Sot­tra­zio­ne Dif­fe­ren­za di $number1 e $number2
$number1 *$number2 Mol­ti­pli­ca­zio­ne Prodotto di $number1 e $number2
$number1 / $number2 Divisione Quoziente di $number1 e $number2
$number1 **$number2 Potenza $number1 elevato alla potenza di $number2
<?php
$number1 = 10;
$number2 = 5;
$addition = $number1 + $number2; //Addition
$subtraction = $number1 - $number2; //Subtraction
$multiplication = $number1 * $number2; //Multiplication
$division = $number1 / $number2; //Division
$exponentiation = $number1 ** $number2; //Exponentiation
?>
php
<?php 
echo "Result addition: " . $addition ."<br />"; 
echo "Result subtraction: " . $subtraction . "<br />"; 
echo "Result multiplication: " . $multiplication . "<br />";
echo "Result division: " . $division . "<br />";
echo "10 to the 5th power: " . $exponentiation . "<br />";
echo "Square root of 81: " . sqrt(81) . "<br />";
?>
php
Immagine: Calcolo con le variabili
Un riepilogo dei calcoli con le variabili.

Per i calcoli complessi, è possibile combinare le varie ope­ra­zio­ni arit­me­ti­che in un unico script:

<?php
$number1 = 10;
$number2 = 5;
$result = 2 *$number1 + 5* $number2 - 3 * sqrt(81);
echo "Result: " . $result;
?>
php

L’in­ter­pre­te PHP determina i valori delle variabili ed esegue il calcolo:

2 *10 + 5* 5 - 3 * √81 = 20 + 25 – 27 = 18

La funzione sqrt() calcola la radice quadrata del parametro tra parentesi. Vale la clas­si­fi­ca­zio­ne standard degli operatori ma­te­ma­ti­ci: il punto precede il trattino. L’istru­zio­ne echo produce il risultato come stringa per il browser web.

Immagine: Calcolo matematico con due variabili e diversi operatori aritmetici
PHP segue la regola ma­te­ma­ti­ca del punto prima del trattino.

In PHP, anche i termini tra parentesi sono in­ter­pre­ta­ti per primi. Questa volta lavoriamo con numeri in virgola mobile:

<?php
$number1 = 2.5;
$number2 = 3.7;
$result = 2 *($number1 + 5)* ($number2 - 3) * sqrt(81);
echo "Result: " . $result; 
?>
php

PHP calcola 2*(2,5+5“)*(3,7-3)*√81 e re­sti­tui­sce il risultato 94,5.

Come tutti i comuni linguaggi di pro­gram­ma­zio­ne, anche PHP supporta gli operatori per in­cre­men­ta­re o de­cre­men­ta­re i valori numerici del valore 1. Si fa una di­stin­zio­ne tra l’operatore di pre-in­cre­men­to, l’operatore di pre-de­cre­men­to, l’operatore di post-in­cre­men­to e l’operatore di post-de­cre­men­to.

Ope­ra­zio­ne Operatore Risultato
Pre-in­cre­men­to ++$number L’operatore ++ in­cre­men­ta il valore della variabile $number. Di con­se­guen­za il valore aumenta di 1. Il risultato viene emesso come nuovo valore di $number.
Pre-de­cre­men­to –$number L’operatore de­cre­men­ta il valore della variabile $number. Di con­se­guen­za il valore de­cre­men­ta di 1. Il risultato viene emesso come nuovo valore di $number.
Post-in­cre­men­to $number++ Il valore attuale di $number viene prima emesso e poi in­cre­men­ta­to del valore 1.
Post-de­cre­men­to $number– Il valore attuale di $number viene prima emesso e poi de­cre­men­ta­to del valore 1.

Per di­mo­stra­re le ope­ra­zio­ni arit­me­ti­che con gli operatori di in­cre­men­to o de­cre­men­to, uti­liz­zia­mo l’esempio del pre-in­cre­men­to. Il seguente script in­cre­men­ta di 1 il valore della variabile $number, memorizza il nuovo valore nella variabile $result e quindi ne emette il valore come stringa:

<?php
$number = 0;
$result = ++$number;
echo "Result: " . $result;
?>
php

Au­men­tan­do di 1 il valore 0, si ottiene il risultato 1.

Immagine: Pre-incremento del numero 0
L’operatore ++ in­cre­men­ta 0 di un valore pari a 1.

Per calcolare il pre-de­cre­men­to della variabile $number, ri­cor­ria­mo agli stessi script, ma scam­bian­do l’operatore di pre-in­cre­men­to (++) con quello di pre-de­cre­men­to ():

<?php
$number = 0;
$result = --$number;
echo "Result: " . $result;
?>
php

In questo modo si de­cre­men­ta il valore 0 della variabile $number e si ottiene il risultato -1.

Immagine: Pre-decremento del numero 0
L’operatore -- de­cre­men­ta il numero 0 del valore 1.

L’aumento prima e dopo l’emissione (pre- e post-…) di un valore può essere esem­pli­fi­ca­to dal seguente script:

<?php
$x = 0;
echo '<p>Result: ' . ++$x;
echo '<br>X has the value ' . $x;
echo '<p>Result: ' . $x++;
echo '<br>X has the value ' . $x, '</p>';
?>
php

In entrambi i casi si ottiene lo stesso risultato. Nel caso del pre-in­cre­men­to, il valore x viene in­cre­men­ta­to prima dell’output alla riga 3, mentre nel caso del post-in­cre­men­to dopo l’output alla riga 5.

Immagine: La differenza tra pre- e post-incremento
Pre- e post-in­cre­men­to a confronto.

Le variabili su­per­glo­ba­li $_GET e $_POST

Ora conosci le basi di PHP, sai come gestire le variabili, puoi con­ca­te­nar­le e uti­liz­zar­le per eseguire calcoli. È giunto il momento di mostrarti perché le variabili sono un concetto centrale nella pro­gram­ma­zio­ne degli script.

Una funzione im­por­tan­te dei linguaggi di scripting è la capacità di valutare gli input dell’utente e di tra­sfe­ri­re i valori a un altro script. Per il tra­sfe­ri­men­to dei dati, PHP ricorre alle variabili di sistema su­per­glo­ba­li $_GET e $_POST, variabili pre­de­fi­ni­te e di­spo­ni­bi­li in tutti gli ambiti di validità. In qualità di array as­so­cia­ti­vi,$_GET e $_POST me­mo­riz­za­no un insieme di variabili sotto forma di stringhe in una variabile su­per­glo­ba­le.

Possiamo pensare agli array PHP come a un comò con diversi cassetti. Ciascuno di questi cassetti offre la pos­si­bi­li­tà di me­mo­riz­za­re dati. Per sapere anche in futuro che cosa contiene ogni cassetto, li eti­chet­tia­mo con un nome di variabile. A seconda del tipo di array, il nome può essere un indice (index) o una chiave (key). Mentre negli array in­di­ciz­za­ti, a ogni cassetto viene assegnato un indice sotto forma di numero, in un array as­so­cia­ti­vo i cassetti si eti­chet­ta­no con una chiave sotto forma di stringa.

Le variabili su­per­glo­ba­li $_GET e $_POST con­ten­go­no una serie di variabili sotto forma di chiavi che con­sen­to­no di ottenere i valori associati a tali chiavi. Andiamo a esa­mi­nar­le nel dettaglio.

Tra­smis­sio­ne dei dati tramite $_GET

La su­per­glo­ba­le $_GET rap­pre­sen­ta un array di variabili che vengono trasmesse in uno script PHP tramite un URL.

Se ti capita di fre­quen­ta­re blog, negozi online o forum su internet, potresti aver notato degli URL formulati in modo insolito. Di solito la loro struttura segue il seguente schema:

http://nomehost/cartella/nomefile.php?nomevariabile=valorevariabile

Nel caso di un blog, lo schema potrebbe apparire così:

http://www.blog-esempio.it/index.php?id=1

Un URL di questo tipo può essere decifrato in modo molto semplice: su un server con un dominio blog-esempio.it, si trova un file chiamato index.php, che viene uti­liz­za­to per creare un sito web dinamico. Questo file nor­mal­men­te contiene codice HTML e PHP, nonché ri­fe­ri­men­ti a file di template e fogli di stile esterni: in breve, tutto ciò che è ne­ces­sa­rio per vi­sua­liz­za­re un sito web.

L’aggiunta id=1 dopo il punto in­ter­ro­ga­ti­vo (?) indica che pro­ba­bil­men­te abbiamo a che fare con un sito web dinamico. Si tratta di una stringa di ricerca basata sul pro­to­col­lo HTTP che contiene una variabile (id) e un valore (1) collegati da un segno di uguale (=). I parametri URL di questo tipo vengono uti­liz­za­ti, ad esempio, per creare pagine web dinamiche, caricare contenuti da un database o ri­chia­ma­re un template.

I siti web dinamici con­sen­to­no di separare i contenuti dalla veste grafica. Il file index.php comprende quindi tutte le in­for­ma­zio­ni sulla struttura del sito web, ma deve ancora essere riempito con i contenuti. Ti­pi­ca­men­te, questi sono me­mo­riz­za­ti in un database e possono essere ri­chia­ma­ti tramite i parametri della stringa di ricerca HTTP. Nel nostro esempio, l’URL trasmette a index.php il parametro id=1. Questo parametro sta­bi­li­sce quali contenuti devono essere letti dal database e caricati in index.php. Nel caso di un blog potrebbe trattarsi dell’ID di un articolo, in un forum di una di­scus­sio­ne e in un negozio online di un prodotto.

Se un URL contiene più di un parametro, questi vengono collegati con una e com­mer­cia­le (&).

www.blog-esempio.it/index.php?page=article&id=1

Per il­lu­stra­re l’uso di $_GET con un esempio di codice, possiamo anche fare a meno di un database. Nello script seguente, uti­liz­zia­mo la su­per­glo­ba­le $_GET per leggere i valori delle variabili forename (nome) e surname (cognome) da una stringa di ricerca HTTP e scriverli nelle variabili PHP $variable1 e $variable2:

<?php
$variable1 = $_GET['forename'];
$variable2 = $_GET['surname'];
echo "Hello " . $variable1 . " " . $variable2 . "!";
?>
php

L’ese­cu­zio­ne dello script avviene tramite il seguente URL:

localhost/hello.php?forename=John&surname=Doe

In questo modo tra­smet­tia­mo i parametri forename=Johnesurname=Doe. I valori vengono emessi come prima con l’aiuto del costrutto lin­gui­sti­co echo.

Immagine: Trasmissione dei dati tramite $_GET
Il parametro URL trasmette allo script PHP la coppia di valori forename=John e surname=Doe.

La tra­smis­sio­ne dei dati tramite $_GET comporta ne­ces­sa­ria­men­te che i dati trasmessi siano visibili nella barra degli indirizzi. In questo modo è possibile capire in qualsiasi momento quali parametri vengono trasmessi. Il vantaggio di ciò è che le variabili possono essere salvate nei col­le­ga­men­ti iper­te­stua­li. Inoltre l’utente ha la pos­si­bi­li­tà di creare URL com­pren­si­vi di stringa di ricerca sotto forma di se­gna­li­bro nel browser.

Il fatto che il parametro GET venga eseguito nel testo in chiaro nell’URL di­squa­li­fi­ca questo metodo per la tra­smis­sio­ne di dati sensibili, come ad esempio nel caso di moduli online. Inoltre il volume dei dati che possono essere inviati tramite $_GET è limitato dalla lunghezza massima degli URL.

Queste re­stri­zio­ni possono essere aggirate con HTTP POST. I dati tra­sfe­ri­ti con questo metodo si trovano nella su­per­glo­ba­le $_POST.

Tra­smis­sio­ne dei dati tramite $_POST

Mentre nel metodo GET i dati da tra­smet­te­re vengono inoltrati come parametro dell’URL, nel corpo (body) di una richiesta HTTP i dati vengono tra­sfe­ri­ti tramite $_POST. Ciò consente di tra­smet­te­re anche grandi quantità di dati da uno script a un altro.

Uno dei campi di ap­pli­ca­zio­ne prin­ci­pa­li del metodo HTTP POST è la tra­smis­sio­ne dati dei moduli HTML. Lo di­mo­stria­mo con l’esempio della re­gi­stra­zio­ne a una new­slet­ter.

Per prima cosa, è ne­ces­sa­rio creare un nuovo file PHP con il nome page1.php e inserire il seguente blocco di codice:

<form method="post" action="page2.php" >
Please send the newsletter to: <br />
Forename: <input type="text" name="forename" /><br />
Surname: <input type="text" name="surname" /><br />
Email address: <input type="text" name="email" /><br />
<input type="submit" value="Submit form" />
</form>
php

Per creare i moduli viene uti­liz­za­to l’elemento HTML <form>. Ciò comprende due attributi nel tag iniziale: methodeaction. Con l’attributo method si definisce il metodo di tra­smis­sio­ne, in questo caso HTTP POST. Nell’attributo action viene creato l’URL di uno script che riceve tutti i dati da includere nei campi di input suc­ces­si­vi. Il codice usato da esempio rap­pre­sen­ta un modulo HTML con tre elementi di input (input type=“text”) e un pulsante di invio (input type=“submit”). Il file page2.php è definito come de­sti­na­ta­rio dei dati.

Per il­lu­stra­re il tra­sfe­ri­men­to dei dati tramite $_POST, uti­liz­zia­mo un semplice script per la va­lu­ta­zio­ne dei dati del modulo che salva i valori tra­sfe­ri­ti come variabili PHP e li re­sti­tui­sce in forma di testo. A tale scopo, occorre creare un file page2.php e scrivere il seguente codice:

<?php
$forename = $_POST["forename"];
$surname = $_POST["surname"];
$email = $_POST["email"]; 
echo "Hello" . $forename . " " . $surname . ", <br /> 
you are registered with the following email address: " . $email . ".";
?>
php

Salva entrambi i file PHP nella cartella htdocs del tuo server di test e apri page1.php tramite l’URL seguente dal browser: http://localhost/page1.php. Nel browser dovresti ora vi­sua­liz­za­re l’in­ter­fac­cia in­te­rat­ti­va del tuo modulo HTML.

Immagine: Immissione di dati tramite un modulo HTML
Il modulo HTML page1.php raccoglie i dati dell’utente e li invia allo script che ha l’indirizzo page2.php.

Inserisci le cre­den­zia­li di accesso e premi il pulsante di invio per tra­sfe­ri­re le variabili da uno script all’altro. Dopo aver con­fer­ma­to l’in­se­ri­men­to in page1.php, avverrà im­me­dia­ta­men­te il rein­di­riz­za­men­to a page2.php. La finestra del browser mostrerà il risultato dell’ese­cu­zio­ne dello script in base ai dati tra­sfe­ri­ti.

Immagine: Output dei dati utente
Tra­smis­sio­ne dei dati con il metodo HTTP POST e output tramite echo.

Gli input dell’utente raccolti at­tra­ver­so i campi di input di page1.php vengono re­cu­pe­ra­ti da page2.php at­tra­ver­so il seguente schema:

$_POST["Nome del campo di input"]

Di con­se­guen­za le righe $forename = $_POST[“forename”] aprono l’input nel campo forename e lo salvano nella variabile $forename. La variabile $forename può nuo­va­men­te essere emessa tramite echo come stringa.

Il costrutto if e gli operatori di confronto in PHP

Finora abbiamo definito le variabili, le abbiamo tra­sfe­ri­te da uno script all’altro e le abbiamo prodotte come stringhe. Nel prossimo passo, im­pa­re­re­mo a collegare l’ese­cu­zio­ne di frammenti di codice a de­ter­mi­na­te con­di­zio­ni.

Il costrutto lin­gui­sti­co if dà la pos­si­bi­li­tà di scrivere script in modo che le istru­zio­ni diventino effettive solo quando viene sod­di­sfat­ta una con­di­zio­ne definita dall’utente, come ad esempio l’in­se­ri­men­to di una password corretta.

Le con­di­zio­ni sono definite in PHP secondo la seguente struttura di base:

<?php
if(expression)
    {
    statement;
    }
?>
php

Il codice va letto nel modo seguente: la di­chia­ra­zio­ne (statement) viene eseguita solo se la con­di­zio­ne contenuta nell’espres­sio­ne (ex­pres­sion) è sod­di­sfat­ta. Una con­di­zio­ne è sempre sod­di­sfat­ta se il costrutto ifre­sti­tui­sce il risultatoTRUE (vero). In caso contrario, viene con­si­de­ra­ta FALSE (falsa). In questo caso, l’istru­zio­ne viene saltata.

So­li­ta­men­te il costrutto if verifica che il valore di una variabile cor­ri­spon­da a quello che è stato definito nella con­di­zio­ne. Questa struttura di controllo viene nor­mal­men­te rea­liz­za­ta sulla base di operatori di confronto.

Operatori di confronto

Gli operatori di confronto vengono uti­liz­za­ti nella for­mu­la­zio­ne di con­di­zio­ni per mettere in cor­re­la­zio­ne logica due argomenti, che possono essere valutati come veri (TRUE) o falsi (FALSE). Quando gli operatori di confronto vengono uti­liz­za­ti nelle strutture di controllo PHP, questi vengono applicati su due variabili nell’espres­sio­ne di un costrutto if:

if ($a == $b) 
    {
    statement;
    }
php

La struttura di controllo può dunque essere letta in questo modo: se la variabile $a è uguale alla variabile $b, verranno eseguite le istru­zio­ni definite nella di­chia­ra­zio­ne.

Gli operatori di confronto di PHP si basano sul lin­guag­gio di pro­gram­ma­zio­ne C. Per quanto possano apparire simili ai classici simboli ma­te­ma­ti­ci nella loro notazione, si dif­fe­ren­zia­no da questi ultimi per molti aspetti, a volte anche piuttosto so­stan­zia­li. Nella tabella seguente è riportata una pa­no­ra­mi­ca.

Operatore di confronto De­scri­zio­ne Con­di­zio­ne
== è uguale La con­di­zio­ne è sod­di­sfat­ta se $a e $b hanno lo stesso valore.
=== è identico La con­di­zio­ne è sod­di­sfat­ta se $a e $b hanno lo stesso valore e ap­par­ten­go­no allo stesso tipo di dati. È possibile il­lu­stra­re questo aspetto con un esempio in cui un integer (1) viene con­fron­ta­to con una stringa (“1”):
1 == “1” //TRUE
1 === “1” //FALSE

Per le con­di­zio­ni che ri­chie­do­no l’ugua­glian­za di due variabili, è meglio uti­liz­za­re sempre l’operatore re­la­zio­na­le === (è identico).
!= è diverso La con­di­zio­ne è sod­di­sfat­ta quando $a e $b hanno valori dif­fe­ren­ti.
!== non identico La con­di­zio­ne è sod­di­sfat­ta se $a e $b hanno valori non uguali o ap­par­ten­go­no a tipi di dati diversi.
< è minore di La con­di­zio­ne è sod­di­sfat­ta se il valore di $a è minore del valore di $b.
> è maggiore di La con­di­zio­ne è sod­di­sfat­ta se il valore di $a è maggiore del valore di $b.
<= è minore o uguale La con­di­zio­ne è sod­di­sfat­ta se il valore di $a è minore del valore di $b o se $a e $b hanno lo stesso valore.
>= è maggiore o uguale La con­di­zio­ne è sod­di­sfat­ta se il valore di $a è maggiore del valore di $b o se $a e $b hanno lo stesso valore.

Il seguente script ha lo scopo di il­lu­stra­re questa struttura di controllo. Vengono con­fron­ta­ti due integer. L’operatore di confronto è < (è minore di):

<?php
$number1 = 10;
$number2 = 20;
if($number1 < $number2) { 
    echo "The condition is fulfilled";
}
php

Definiamo le variabili $number1 e $number2 e as­se­gnia­mo loro i valori 10e20. Quindi im­po­stia­mo una con­di­zio­ne: se $number1 è minore di $number2, viene emessa la stringa elencata nell’istru­zio­ne echo.

Il risultato dell’ese­cu­zio­ne dello script contiene la risposta: 10 è minore di 20. Il costrutto ifre­sti­tui­sce il risultatoTRUE. “The condition is fulfilled” (La con­di­zio­ne è sod­di­sfat­ta).

Immagine: Applicazione del costrutto linguistico if
Se la con­di­zio­ne è sod­di­sfat­ta, viene eseguita l’istru­zio­ne.

Se desideri definire istru­zio­ni da eseguire non appena una con­di­zio­ne non è sod­di­sfat­ta, aggiungi il costrutto lin­gui­sti­co else alla struttura di controllo if per creare un’istru­zio­ne con­di­zio­na­le if else in PHP:

<?php
if(condition a)
    {
    instruction b;
    }
else 
    {
    instruction c
    }
?>
php

Questo script controlla anche se la con­di­zio­ne a re­sti­tui­sce il risultato TRUE o FALSE. Se la con­di­zio­ne a è sod­di­sfat­ta (TRUE), viene eseguita l’istru­zio­ne b. Se lacon­di­zio­ne anon è sod­di­sfat­ta (FALSE), l’istru­zio­ne bviene saltata e al suo posto viene eseguita l’istru­zio­ne c.

Esten­dia­mo il nostro script con il costrutto else e so­sti­tuia­mo l’operatore di confronto < (è minore di) con == (è uguale):

<?php
$number1 = 10;
$number2 = 20;
if($number1 == $number2) 
    { 
    echo "The condition is fulfilled";
    }
else 
    {
    echo " The condition is not fulfilled";
    }
?>
php

Questa volta il costrutto ifre­sti­tui­sce il risultatoFALSE. Il valore della variabile $number1 non è uguale al valore della variabile $number2. “The condition is not fulfilled” (La con­di­zio­ne non è sod­di­sfat­ta). Pertanto, viene eseguita soltanto l’istru­zio­ne definita sotto if e non quella definita sotto else.

Immagine: Applicazione del costrutto linguistico else
Se la con­di­zio­ne non è sod­di­sfat­ta, viene eseguita l’istru­zio­ne definita in else.
N.B.

Se l’ese­cu­zio­ne di una parte di codice è collegata all’ugua­glian­za di due valori, in PHP viene uti­liz­za­to un doppio segno di uguale (==). Il segno di uguale semplice (=) va uti­liz­za­to esclu­si­va­men­te nell’as­se­gna­zio­ne di valori a variabili.

<?php
$number1 = 10;
$number2 = 20;
if ($number1 == $number2) 
    { 
    echo "The numbers are the same.";
    }
if (!($number1 == $number2))
    {
    echo "The numbers are different.";
    }
?>
php

L’esempio mostra la con­di­zio­ne $number1 == $number2 e la loro negazione. !($number1 == $number2) cor­ri­spon­de a ($number1 != $number2).

Un’ap­pli­ca­zio­ne pratica di if ed else è, per esempio, la richiesta di password basata su un modulo HTML. Simuliamo ancora una volta questo caso uti­liz­zan­do i nostri file PHP page1.phpepage2.php.

Apri page1.php e incolla il seguente codice nel modulo:

<form action="page2.php" method="post">
Please enter your password: <input type="password" name="password" />
<input type="submit" value="Submit" />
</form>
php

La struttura cor­ri­spon­de al modulo già creato. Questa volta, però, è suf­fi­cien­te un solo campo di input: la richiesta della password. Come in pre­ce­den­za, l’input dell’utente viene trasmesso allo script page2.php.

Adattiamo il codice seguente in modo che l’in­se­ri­men­to della password sia abbinato a una password me­mo­riz­za­ta:

<?php
$password = $_POST["password"];
if($password=="qwertz123")
    {
    echo "The password was correct";
    }
else
    {
    echo "The password was incorrect";
    }
?>
php

Il codice si legge come segue: per prima cosa, nella riga 2 as­se­gnia­mo un valore alla variabile $password, che re­cu­pe­ria­mo tramite il metodo HTTP POST. Quindi definiamo la seguente struttura di controllo: la struttura if nella riga 3 serve a ve­ri­fi­ca­re se il valore della variabile $password cor­ri­spon­de alla stringa qwertz123. In caso af­fer­ma­ti­vo, viene emessa la stringa The password was correct (La password è corretta). Se ifre­sti­tui­sce il risultatoFALSE, nella riga 7 viene uti­liz­za­to else e viene emessa la stringa The password was incorrect (La password è errata).

Ora apriamo lo script page1.php tramite l’URL http://localhost/page1.php.

Immagine: Interfaccia utente del modulo HTML con richiesta di inserimento della password
Il modulo HTML richiede di inserire una password.

Il browser presenta la vi­sua­liz­za­zio­ne web del modulo HTML per la richiesta della password. Ac­cet­tia­mo la richiesta, inseriamo la password qwertz123 definita nello script page2.php e facciamo clic sul pulsante di invio.

Immagine: La password inserita è corretta
Lo script conferma che la password inserita è corretta.

Il browser web rein­di­riz­za au­to­ma­ti­ca­men­te a page2.php. In back­ground, la struttura di controllo if confronta il nostro input con la password me­mo­riz­za­ta e giunge al seguente verdetto: “qwertz123 == qwertz123 è TRUE”, emettendo così la stringa The password was correct.

Ti invitiamo a ve­ri­fi­ca­re per­so­nal­men­te cosa succede digitando una password diversa nel campo di im­mis­sio­ne.

Operatori logici

Le con­di­zio­ni definite uti­liz­zan­do gli operatori di confronto nell’espres­sio­ne del costrutto if possono essere collegate ad altre con­di­zio­ni nella stessa espres­sio­ne, se ne­ces­sa­rio. PHP si basa sugli operatori logici ANDeOR.

Alias simbolico Operatore De­scri­zio­ne
&& AND Entrambe le con­di­zio­ni associate all’operatore devono essere TRUE.
|| OR Solo una delle due con­di­zio­ni associate all’operatore deve essere TRUE.

Per collegare le con­di­zio­ni, PHP fornisce operatori logici con elementi di unione vin­co­lan­ti e poco vin­co­lan­ti. Uti­liz­zan­do solo una delle due notazioni, non si noterà alcuna dif­fe­ren­za nella pratica. Com­bi­nan­do entrambe le notazioni, si noterà che OR e || vincolano più stret­ta­men­te di AND e OR. Inoltre, AND e && sono più vin­co­lan­ti di OR e ||. Questo è pa­ra­go­na­bi­le all’ordine di pre­ce­den­za degli operatori ma­te­ma­ti­ci (ad esempio, ** è più vin­co­lan­te di +).

Un esempio pratico è fornito dalla richiesta di password. Di norma, i dati di login com­pren­do­no una password segreta e un nome utente. Solo se entrambe le voci cor­ri­spon­do­no ai dati me­mo­riz­za­ti nel sistema, il login va a buon fine.

Riapriamo il modulo di richiesta della password in page1.php e ag­giun­gia­mo un campo di input per il nome utente:

<form action="page2.php" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" value="Submit" />
</form>
php

Nel prossimo passaggio, dobbiamo adattare anche la struttura di controllo del costrutto if. Uti­liz­zia­mo l’operatore logico AND per collegare la con­di­zio­ne per la richiesta della password con la con­di­zio­ne per la richiesta del nome utente.

<?php
$username = $_POST["username"];
$password = $_POST["password"];
if($username=="John Doe" AND $password=="qwertz123")
    {
    echo "Welcome to the internal area" . $username . "!";
    }
else
    {
    echo "Access denied";
    }
?>
php

Il nostro script page2.php ora riceve i valori di username e password e li memorizza nelle variabili $username e $password. L’espres­sio­ne del costrutto if contiene ora due con­di­zio­ni collegate dall’operatore logico AND. Solo se entrambe le con­di­zio­ni sono sod­di­sfat­te (username==“John Doe”e$password==“qwertz123”),ifre­sti­tui­sce il risultatoTRUE.

Poiché il nome utente viene ottenuto tramite il campo di input username, possiamo uti­liz­zar­lo di­ret­ta­men­te per l’output di testo tramite echo: Welcome to the internal area (Ti diamo il benvenuto nell’area riservata) è seguito dal valore della variabile $username. Se una delle due con­di­zio­ni non è sod­di­sfat­ta, viene vi­sua­liz­za­to il testo: Access denied (Accesso negato).

Immagine: Richiesta della password con due condizioni
Solo se entrambe le con­di­zio­ni sono sod­di­sfat­te, lo script conferma l’in­se­ri­men­to corretto della password.

Gli operatori logici possono essere combinati in qualsiasi modo. Si applica quanto segue: AND ha una posizione più alta rispetto a OR. Come per le equazioni ma­te­ma­ti­che, anche in PHP è possibile uti­liz­za­re le parentesi per in­fluen­za­re l’ordine.

Cicli o loop (while, for)

A volte è ne­ces­sa­rio che uno script esegua più volte una de­ter­mi­na­ta sezione di codice prima che venga eseguito il resto del codice del programma. Il lin­guag­gio di pro­gram­ma­zio­ne PHP utilizza il concetto di ciclo (loop), chiamato anche ciclo PHP. Esistono tre tipi di cicli:

  • while
  • do-while
  • for

Ciclo PHP while

Il ciclo while è il tipo più semplice di ciclo di­spo­ni­bi­le in PHP. La struttura di base cor­ri­spon­de al seguente schema:

while (condition)
    {
    loop step and other instructions
    }
php

Il ciclo while indica a PHP di eseguire le istru­zio­ni su­bor­di­na­te fintanto che la con­di­zio­ne while è sod­di­sfat­ta. Per fare ciò, l’in­ter­pre­te PHP controlla la con­di­zio­ne all’inizio di ogni passaggio del ciclo. L’ese­cu­zio­ne del codice su­bor­di­na­to si in­ter­rom­pe solo quando la con­di­zio­ne while non è più sod­di­sfat­ta.

Questo principio può essere il­lu­stra­to con un semplice script numerico:

<?php
$number = 1;
while ($number <= 10) {
    echo $number++ . "<br />";
    }
?>

Abbiamo pre­ce­den­te­men­te in­tro­dot­to il principio dell’in­cre­men­to nella sezione “Calcolo con le variabili”. Nello script che segue ci ri­fac­cia­mo a questo principio, uti­liz­zan­do però un operatore di post-in­cre­men­to per aumentare il valore della variabile intera $number di 1 per ogni passaggio del ciclo solo dopo l’output del testo tramite echo. Come con­di­zio­ne per il ciclo while definiamo: $number maggiore di/uguale a 10. L’istru­zio­ne echo viene quindi ripetuta fino a quando $number non ha assunto un valore maggiore di 10.

Immagine: Lo script conta fino a 10 e poi si interrompe
Lo script in­cre­men­ta la variabile $number fino a rag­giun­ge­re un valore superiore a 10.

Il risultato dell’ese­cu­zio­ne dello script è una stringa che riporta il valore della variabile $number per ogni passaggio del ciclo prima che venga in­cre­men­ta­to. Pertanto, lo script conta da 1 a 10 e termina l’ese­cu­zio­ne del codice quando la con­di­zio­ne while non è più sod­di­sfat­ta.

Ciclo PHP do-while

La struttura del ciclo PHP do-while as­so­mi­glia a quella del ciclo PHP while. L’unica dif­fe­ren­za è che la con­di­zio­ne non viene con­trol­la­ta all’inizio di ogni passaggio del ciclo, bensì solo alla fine. Nel seguente esempio, vediamo come appare lo schema di base di un ciclo do-while:

do {
     loop step and other instructions
     } 
    while (condition)
php

Se pro­gram­ma­to come un ciclo do-while, lo script pre­ce­den­te avrebbe il seguente aspetto:

<?php
$number = 1;
do {
    echo $number++ . "<br />";
    }
while ($number <= 10); 
?>
php

In questo caso, il risultato rimane lo stesso. La pe­cu­lia­ri­tà del ciclo do-while è che viene eseguito almeno una volta, anche se la con­di­zio­ne non viene sod­di­sfat­ta in nessun passaggio del ciclo.

Ciclo PHP for

In pratica, il ciclo for in uno script PHP ha la stessa fun­zio­na­li­tà del ciclo while. Di­ver­sa­men­te da quest’ultimo, però, il valore di inizio, la con­di­zio­ne e l’istru­zio­ne si trovano all’interno di un’unica riga e non di­stri­bui­ti su tre o più righe. La struttura di base del ciclo for è la seguente:

for (initail value; condition; loop step)
    instructions
php

L’esempio già noto potrebbe quindi essere scritto come un ciclo for in forma compatta:

<?php
for($number = 1; $number <= 10; $number++) {
    echo $number . "<br /> ";
}
?>
php

Prima di tutto, viene definito il valore 1 per la variabile $number. Suc­ces­si­va­men­te, PHP verifica se la con­di­zio­ne $number <= 1 è sod­di­sfat­ta. Se sì, il ciclo continua e vengono eseguite le istru­zio­ni suc­ces­si­ve al ciclo (in questo caso l’istru­zio­ne echo). Solo a questo punto viene eseguito il passaggio del ciclo; in questo caso, non importa se si sceglie il pre-in­cre­men­to o il post-in­cre­men­to, perché questa istru­zio­ne viene comunque eseguita prima che avvenga l’output. Una volta com­ple­ta­to il loop step, inizia il passaggio suc­ces­si­vo.

Valore iniziale, con­di­zio­ne e passaggio del ciclo sono elementi opzionali di un ciclo for. In linea teorica esistono anche cicli vuoti, ma sarebbero ri­don­dan­ti.

Ge­ne­ral­men­te, puoi scegliere se scrivere i tuoi script PHP con un ciclo for o while. C’è però un argomento a favore dei cicli for: as­si­cu­ra­no una migliore visione d’insieme dei dati generali del ciclo. Ciò previene il pericolo di scrivere ac­ci­den­tal­men­te un ciclo infinito che viene eseguito finché la memoria dell’in­ter­pre­te non è piena. Nell’esempio pre­ce­den­te, questo accade quando ci si dimentica di aumentare il valore della variabile $number.

Se però il ciclo deve essere eseguito almeno una volta, in­di­pen­den­te­men­te dalla con­di­zio­ne, la scelta giusta è il ciclo PHP do-while.

break e continue

L’andamento di un ciclo while, do-while o for può essere in­fluen­za­to dalle istru­zio­ni breakecontinue. Si usa break per in­ter­rom­pe­re il corso di un ciclo in qualsiasi punto e continue per saltare un passaggio del ciclo. Entrambe le istru­zio­ni sono legate a una con­di­zio­ne uti­liz­zan­do if. L’esempio seguente mostra il nostro script numerico con break:

<?php
for ($number = 1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "The script stops at 5";
      break;
    }
echo $number . "<br /> ";
}
?>
php

Nel ciclo for abbiamo definito che il valore della variabile $number, a partire da un valore iniziale di 1, deve essere in­cre­men­ta­to del valore 1 a ogni ciclo fino a quando la variabile non avrà raggiunto il valore 10. In­ter­rom­pia­mo questo ciclo pre­ma­tu­ra­men­te con l’istru­zio­ne break non appena $number ha raggiunto il valore 5. Il costrutto lin­gui­sti­co echo produrrà quindi soltanto i numeri da 1 a 4.

Immagine: Ciclo PHP for con break
L’istru­zio­ne break determina l’in­ter­ru­zio­ne del ciclo non appena viene sod­di­sfat­ta la con­di­zio­ne if.

Se vogliamo saltare solo l’output del quinto ciclo senza in­ter­rom­pe­re l’intero ciclo, so­sti­tuia­mo l’istru­zio­ne break con continue:

<?php
for ($number=1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "We skip number 5!<br />";
      continue;
    }
echo $number . "<br /> ";
}
?>
php

Al posto della cifra 5, PHP re­sti­tui­sce la stringa di testo definita in if We skip number 5! (Esclu­dia­mo il numero 5!).

Immagine: Ciclo PHP for con istruzione continue
Il ciclo for è in­ter­rot­to dall’istru­zio­ne continue.

Ope­ra­zio­ni con i file

I contenuti web dinamici prevedono la se­pa­ra­zio­ne tra contenuto e pre­sen­ta­zio­ne. I linguaggi di script, come PHP, for­ni­sco­no varie fun­zio­na­li­tà che con­sen­to­no di caricare contenuti da fonti di dati esterne in file di modelli centrali. So­stan­zial­men­te, queste fonti di dati sono database gestiti con sistemi di gestione come MySQL. Per sapere come funziona, con­sul­ta­te il nostro tutorial su MySQL.

Inoltre, esiste la pos­si­bi­li­tà di integrare dati da file. Vediamo di seguito come leggere i file come stringhe in uno script PHP e come salvare gli output di testo del tuo script in un file.

Leggere i file

Per leggere il contenuto di un file, PHP fornisce diverse funzioni, tra cui file()efile_get_contents() che sono par­ti­co­lar­men­te adatte ai nostri scopi. Mentre la funzione file_get_contents() legge l’intero contenuto di un file in una stringa, la funzione file() memorizza il contenuto come un array. Ogni elemento dell’array cor­ri­spon­de a una riga del file. Uti­liz­zan­do file() è quindi più facile produrre ogni riga sin­go­lar­men­te.

Di­mo­stria­mo le ope­ra­zio­ni con i file PHP sul file di testo example.txt, collocato nella cartella htdocs del nostro server di prova. Il contenuto del file è co­sti­tui­to da quattro righe di testo di esempio:

Lorem ipsum dolor sit amet, con­sec­te­tuer adi­pi­scing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis par­tu­rient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pel­len­te­sque eu, pretium quis, sem.

Per prima cosa leggiamo l’intero file come una stringa. A tale scopo, dobbiamo assegnare il nome del file in questione come parametro alla funzione file_get_contents(). Ciò avviene secondo il seguente schema:

file_get_contents('example.txt')

Ora è possibile lavorare con la stringa letta. Possiamo, ad esempio, as­se­gnar­la a una variabile e vi­sua­liz­zar­la come testo sul browser web:

<?php
$example = file_get_contents('example.txt');
echo $example;
?>
php
Immagine: Lo script legge il file example.txt.
Il file letto viene ri­pro­dot­to sul browser.

Nella vista del browser, os­ser­via­mo che la stringa di testo viene generata senza paragrafi. Le in­ter­ru­zio­ni di riga del file originale non sono visibili. Ciò è dovuto al fatto che il browser web in­ter­pre­ta l’output di testo dello script come codice HTML. Le in­ter­ru­zio­ni di riga definite negli editor di testo vanno quindi perse.

Se vuoi attenerti alla struttura originale, hai diverse opzioni. Ad esempio, puoi ag­giun­ge­re ma­nual­men­te la codifica HTML per l’in­ter­ru­zio­ne di riga (br) nel file sorgente usando il tasto cerca e so­sti­tui­sci, inserire un <pre> intorno al contenuto del file, assegnare la proprietà CSS white-space: pre-wrap all’area o usare la funzione nl2br() per segnalare a PHP che le in­ter­ru­zio­ni di riga (new lines) devono essere con­ver­ti­te au­to­ma­ti­ca­men­te in in­ter­ru­zio­ni di riga HTML (breaks). La funzione va uti­liz­za­ta secondo il seguente schema:

<?php
$example = file_get_contents('example.txt');
echo nl2br($example);
?>
php

Se il costrutto lin­gui­sti­co echo viene usato in com­bi­na­zio­ne con nl2br(), PHP inserirà un’in­ter­ru­zio­ne di riga HTML prima di ogni nuova riga.

Immagine: La funzione nl2br() applicata
nl2br() serve a vi­sua­liz­za­re un testo disposto su più righe.

Se desideri emettere le righe di un file sin­go­lar­men­te, puoi avvalerti della funzione file(). Questa funzione legge un file, numera tutte le righe iniziando da 0 e ne memorizza il contenuto come elementi di un array. Applicato al nostro esempio, il risultato è la seguente as­se­gna­zio­ne:

[0] = Lorem ipsum dolor sit amet, con­sec­te­tuer adi­pi­scing elit

[1] = Aenean commodo ligula eget dolor. Aenean massa.

[2] = Cum sociis natoque penatibus et magnis dis par­tu­rient montes, nascetur ridiculus mus.

[3] = Donec quam felis, ultricies nec, pel­len­te­sque eu, pretium quis, sem

Per vi­sua­liz­za­re il contenuto del file uti­liz­zan­do echo basta spe­ci­fi­ca­re il numero di riga de­si­de­ra­to. Ad esempio, lo script seguente fornisce solo la prima riga del file esempio.txt come output sul browser:

<?php
$example = file("example.txt");
echo $example [0];
?>
php
Immagine: La funzione file() applicata
Scegli quale elemento dell’array vi­sua­liz­za­re.

Scrivere file

PHP non consente solo di leggere i file, ma offre anche la pos­si­bi­li­tà di crearli e de­scri­ver­li per mezzo di contenuti.

A tale scopo uti­liz­zia­mo la funzione PHP file_put_contents(). Questa funzione necessita di due parametri: il nome del file da creare o ag­gior­na­re e i dati sotto forma di stringa o array. Lo script seguente crea il file test.txt e scrive la stringa This is a test! (Questo è un test!) nella prima riga. L’aggiunta \r\n porta a un’in­ter­ru­zio­ne di riga nel file di de­sti­na­zio­ne.

<?php
file_put_contents("test.txt", "This is a test! \r\n");
echo "test.txt was created!";
?>
php
Immagine: Operazioni con i file: scrivere file
Lo script PHP scrive la stringa “This is a test!” nel file test.txt.

Dal momento che file_put_contents non fornisce alcun output per il browser, ag­giun­gia­mo un’istru­zio­ne echo che ci comunica quale azione viene eseguita.

Se nella cartella di de­sti­na­zio­ne è già presente un file con lo stesso nome, esso verrà so­vra­scrit­to. Per evitare che ciò accada, imposta il parametro FILE_APPEND:

<?php
file_put_contents("test.txt","The test was successful! \r\n", FILE_APPEND);
echo "test.txt was updated!";
?>
php

Uti­liz­zan­do file_put_contents() con il parametro FILE_APPEND, i nuovi contenuti vengono aggiunti a quelli esistenti.

Immagine: Operazioni con i file: aggiornare i file
Lo script PHP aggiunge la stringa “The test was suc­ces­sful!” (Il test è riuscito!

Il contenuto scritto da PHP nel file di de­sti­na­zio­ne non deve ne­ces­sa­ria­men­te essere definito nello script. Come al­ter­na­ti­va, puoi scegliere di tra­sfe­ri­re il contenuto da un file a un altro. Lo script seguente legge il contenuto di esempio.txt e lo inserisce nel file test.txt:

<?php
$example = file_get_contents("example.txt");
file_put_contents("test.txt", $example, FILE_APPEND);
echo "test.txt was updated!";
?>
php
Immagine: Operazioni con i file: trasferire il contenuto di un file a un altro
Lo script PHP legge i dati del file example.txt e li aggiunge al file test.txt.
Vai al menu prin­ci­pa­le