In questa serie di articoli analizzeremo vari aspetti dell'uso del PHP, con
una particolare attenzione agli strumenti per lo sviluppo di siti web dinamici.
Alcuni degli esempi che verranno presentati saranno l'inclusione di file di
testo all'interno della pagina, la realizzazione di un form-to-mail, un sistema
per l'upload di file da form fino all'uso dei database. Ci saranno delle note
per chi è appena entrato nel mondo della programmazione (i "newbie").
Il PHP (inizialmente Personal Home Page, adesso HyperText Pre Processor) è
un linguaggio di scripting server-side. Possiamo considerarlo una specie di
"plug-in" per il webserver, infatti grazie a questo componente esso
è in grado di interpretare un nuovo tipo di file: gli script PHP. Si
tratta di pagine HTML all’interno del quale è presente del codice che
viene interpretato dal "plug-in" e trasformato in testo, HTML, persino
immagini e file PDF, prelevando dati da sorgenti esterne come file di testo,
database, anche da altri siti web.
Chi finora ha realizzato pagine in HTML e JavaScript sa che gli script client-side
vengono eseguiti direttamente dal browser ovvero sul lato client (con problemi
di compatibilità tra i diversi browser). Usare uno script sul lato server
significa invece eseguire una certa serie di istruzioni per poi "confezionare"
in HTML una pagina che verrà inviata al browser dell'utente. Chi visualizza
la pagina non vedrà nulla del codice usato sul server poiché riceverà
semplice HTML; questo è un grande vantaggio prima di tutto perché
permette di usare sistemi molto sicuri ad esempio per la protezione di un'area
del sito con password, e poi perché rende possibile creare in modo automatico
delle pagine sempre aggiornate; la tecnologia è assolutamente trasparente
all'utente finale, mettendo al sicuro tutto il lavoro che viene svolto sul codice
sorgente.
Guardiamo subito un esempio per chiarirci le idee:
<html>
<?
// esempio_1.php
// Primo esempio PHP
// Questo testo è un commento e l'utente non lo potrà vedere
?>
<head>
<title>PHP: primo esempio</title>
</head>
<body>
<?
echo "<p>Questo testo viene creato dal codice PHP</p>";
?>
<p>Invece questo testo è contenuto direttamente nella pagina</p>
</body>
</html>
Quando richiameremo questo file con il browser, il codice che otterremo sarà
il seguente:
<html>
<head>
<title>PHP: primo esempio</title>
</head>
<body>
<p>Questo testo viene creato dal codice PHP</p>
<p>Invece questo testo è contenuto direttamente nella pagina</p>
</body>
</html>
Come potete notare, del codice PHP non è rimasto praticamente nulla:
quello che vedo è semplicissimo HTML... naturalmente questo è
solo un esempio, nella pagina avrei potuto includere file esterni, notizie aggiornate,
ecc.
La funzione echo() semplicemente stampa sulla pagina quello che
è contenuto all'interno della stringa.
Per i newbie: che cos'è una stringa?
Una stringa è una porzione di testo racchiusa tra le virgolette; le virgolette
che la racchiudono non vengono visualizzate.
Visto questo possiamo introdurre la sintassi del PHP in modo da avere le idee
più chiare per i passi successivi. La sintassi del PHP deriva in gran
parte da quella del linguaggio C, ma essendo un linguaggio Open-Source anche
l’influenza del Perl e di altri linguaggi è stata significativa; vedremo
queste caratteristiche strada facendo. Iniziamo ora ad analizzare gli elementi
di base della sintassi, e precisamente dal punto e virgola (in inglese semicolon).
Al contrario di altri linguaggi, gli spazi bianchi e gli a-capo non sono significativi
per il PHP (eccetto all’interno di stringhe). E’ possibile scrivere il codice
usando spazi in più, lasciando linee vuote e usando le tabulazioni per
avere un codice più chiaro e comprensibile. Quello che conta per separare
i blocchi di sintassi è il punto e virgola, che va posto alla fine di
ogni istruzione. Se ve ne dimenticate qualcuno per strada non disperate, è
l’errore più comune e l’interprete PHP lo individua rapidamente segnalandolo
assieme al numero della riga "sospetta".
Vediamo subito un esempio dell’utilizzo degli spazi.
print( date("d M Y H:i:s", time()) );
print(
date("d M Y H:I:s,
time()
)
)
;
Le due istruzioni sono perfettamente equivalenti, anche se nella seconda abbiamo
inserito spazi, tabulazioni, linee vuote. La libertà che si può
avere nel personalizzare il proprio stile di scrittura del codice aiuta molto
il programmatore.
Per chi programma in Visual Basic:
Nel Visual Basic la fine della riga delimita l’istruzione; se non viene specificato
un carattere di continuazione, si assume che nella riga successiva sia contenuta
un’altra istruzione.
Per chi programma in JavaScript:
Nel PHP il punto e virgola è obbligatorio, mentre in JavaScript non è
significativo.
Per delimitare i commenti nel PHP esistono tre sistemi
/* questo marcatore delimita un commento su più righe
attenzione che questo tipo di commento non può essere
annidato */
// un commento su un’unica riga
$temp = 234; // può essere inserito anche sulla stessa riga di un’istruzione
# un altro modo di scrivere un commento su una sola riga
$temp = "Scrivi il tuo nome: "; # anche questo può essere
inserito
#
a fianco di un’istruzione
Vi chiederete probabilmente il perché di due modi diversi per indicare
i commenti "in linea". La risposta è semplice: il PHP è
un linguaggio Open Source e per questo si adatta alle esigenze di chi programma:
la sintassi ‘//’ è quella abituale per i programmatori C/C++,
mentre la sintassi ‘#’ è quella del Perl e degli script
di shell.
Per chi programma in Visual Basic:
Mmi permetto di raccomandare l’utilizzo della sintassi ‘//’ perché
è quella universalmente applicata dai programmatori C/C++, Java e JavaScript.
Per chi programma in Perl:
Come avete visto potete usare tranquillamente la sintassi ‘#’,
ma vi consiglio comunque di utilizzare la sintassi ‘//’, poiché
è quella maggiormente diffusa e riconosciuta dai programmatori PHP.
Per delimitare i commenti nel PHP esistono tre sistemi
/* questo marcatore delimita un commento su più righe
attenzione che questo tipo di commento non può essere
annidato */
// un commento su un’unica riga
$temp = 234; // può essere inserito anche sulla stessa riga di un’istruzione
# un altro modo di scrivere un commento su una sola riga
$temp = "Scrivi il tuo nome: "; # anche questo può essere
inserito
#
a fianco di un’istruzione
Vi chiederete probabilmente il perché di due modi diversi per indicare
i commenti "in linea". La risposta è semplice: il PHP è
un linguaggio Open Source e per questo si adatta alle esigenze di chi programma:
la sintassi ‘//’ è quella abituale per i programmatori C/C++,
mentre la sintassi ‘#’ è quella del Perl e degli script
di shell.
Per chi programma in Visual Basic:
Mmi permetto di raccomandare l’utilizzo della sintassi ‘//’ perché
è quella universalmente applicata dai programmatori C/C++, Java e JavaScript.
Per chi programma in Perl:
Come avete visto potete usare tranquillamente la sintassi ‘#’,
ma vi consiglio comunque di utilizzare la sintassi ‘//’, poiché
è quella maggiormente diffusa e riconosciuta dai programmatori PHP.
Per i newbie:
Che cos’è una variabile? Possiamo considerarla una specie di "scatola"
all’interno della quale possiamo inserire dei dati; una variabile può
contenere del testo, oppure un numero, o un riferimento ad un file ecc.
La maggior parte dei linguaggi di programmazione (ad eccezione del Perl) non
usa un carattere speciale per identificare il nome delle variabili; nel PHP
questo carattere è il simbolo del dollaro (‘$’) da inserire
all’inizio del nome, che "guarda caso" è proprio uno dei caratteri
utilizzati nel Perl :))
Le variabili in PHP non hanno bisogno di essere dichiarate, poiché la
dichiarazione avviene nel momento in cui alla variabile viene assegnato un valore;
inoltre non è necessario definirne il tipo, questo significa che una
variabile che contiene un numero può essere interpretata sia come numero
che come testo.
Per i newbie:
Che cos’è la dichiarazione? In parole povere nella maggior parte dei
linguaggi di programmazione, prima di poter utilizzare una variabile è
necessario "presentarla" al programma assegnandole un valore e un
tipo; ad esempio una tipica dichiarazione in Javascript è: var
img_01 = new Image();, una tipica dichiarazione C è int
counter = 0;.
Vediamo qualche esempio.
$variabile = "Un po’ di testo"; // Questo variabile contiene
una stringa di testo
Nei due esempi successivi le variabili sono valide in entrambi i casi:
$variabile = "1";
$variabile = 1;
Il PHP assegna il tipo alla variabile in base al contesto in cui si trova.
Nell’esempio che segue la variabile $numero verrà convertita
in stringa prima di essere passata alla funzione echo().
$numero = 645.3;
echo $numero;
Vediamo un esempio leggermente più complesso:
echo 234 + "145";
In questo caso il PHP converte la stringa "145" in un
numero intero, lo somma all’intero 234, converte il risultato in
stringa e lo visualizza sulla pagina tramite la funzione echo().
Se volete forzare un tipo per una variabile dovete usare gli operatori di cast
oppure la funzione settype().
Il cast si fa in questo modo:
$variabile = (string) 234; // Il PHP assegnerà a $variabile
il valore "234"
Usando la funzione settype() invece:
$variabile = 12;
settype($variabile, "double"); // La variabile adesso contiene
un numero decimale (= con la virgola)
Ecco una piccola lista dei tipi di variabile disponibili:
| Integer |
Numero intero |
| Double |
Numero decimale ‘floating point’ |
| Bool |
Valore booleano (Vero o Falso), introdotto dal PHP 4.0 |
| Array |
È un ibrido tra le matrici ordinate e le matrici associative |
| Object |
Un oggetto con proprietà e metodi |
Per chi programma in Perl:
Il Perl fa uso di tre caratteri (‘$’, ‘@’, ‘%’)
per differenziare il contesto di una variabile, mentre il PHP fa uso solo di
uno di questi. Mentre nel Perl ‘$’ identifica gli scalari, nel
PHP il carattere ‘$’ segnala solamente che la parola che lo segue
è il nome di una variabile, ma non dice nulla sul tipo di questa.
Per chi programma in Visual Basic:
In PHP non c’è alcun bisogno di definire una variabile prima di utilizzarla,
ad esempio l’istruzione contenuta nell’esempio seguente non è richiesta:
Dim nome_var as Integer; ‘ VBScript.
h3>Raggio di validità delle variabili
In PHP il raggio di validità di una variabile dipende dal suo contesto.
Se la variabile viene definita all’interno di una funzione, essa sarà
visibile solamente all’interno di quella funzione.
Esempio:
$var_esempio = "Qualche parola";
function prova()
{
$var_esempio = 4523;
}
echo $var_esempio; // La funzione echo visualizzerà la stringa "Qualche
parola".
Se la variabile viene definita all’interno di una classe, essa sarà
visibile solo tramite l’operatore ‘->’.
Se invece viene definita in un qualsiasi altro punto dello script (compresi
i file esterni inclusi tramite le funzioni include() e require())
essa sarà visibile in tutto il resto dello script, quello che nel manuale
viene chiamato "global scope".
Ad esempio:
$var_esempio = "Del testo a caso";
function scrivi_esempio()
{
global $var_esempio; // La funzione "cattura" il valore
di $var_esempio
// assegnatole nel "global scope"
echo $var_esempio; // e lo visualizza nella pagina
}
Per chi programma in Visual Basic:
In PHP non c’è nulla di equivalente alle parole chiave ‘Public’
e ‘Private’ usate in Visual Basic. In un certo senso in PHP tutto
è ‘Public’.
Per chi programma in JavaScript:
In JavaScript la parola chiave ‘var’ viene usata per dare alla
variabile un raggio di visibilità globale. In PHP invece ‘var’
serve per identificare una variabile appartenente ad una classe e che quindi
quella variabile sarà valida solo all’interno della classe stessa.
Ci sono dei caratteri (come la tabulazione, l'a-capo, che a volte non possono
essere inseriti così come sono all'interno di una stringa per vari motivi.
Guardiamo i due esempi successivi:
$lettera = "Egregio Signor $nome $cognome,
L'ordine da Lei Inviato è stato ricevuto correttamente, e verrà
espletato al più presto possibile.
In caso di problemi è pregato di chiamare il numero $numero_tel.";
$lettera = "Egregio Signor $nome $cognome,\nL'ordine da Lei Inviato
è stato ricevuto correttamente, e verrà espletato al più
presto possibile.\n In caso di problemi è pregato di chiamare il numero
$numero_tel.";
Le due e-mail preconfezionate si equivalgono, a parte il fatto che nella seconda
appaiono dei caratteri '\n' che indicano l'andata a capo. Segue un piccolo glossario
con i caratteri speciali usati più di frequente.
| ASCII |
Simbolo |
Descrizione |
| 0 |
\0 |
NULL, carattere di fine file |
| 9 |
\t |
Tabulazione orizzontale |
| 10 |
\n |
Ritorno a capo |
| 13 |
\r |
Ritorno carrello |
| 34 |
\" |
" |
| 36 |
\$ |
$ |
| 39 |
\' |
' |
| 92 |
\\ |
\ |
Molto spesso vedo che si fa confusione tra questi due concetti: i nomi delle
variabili sono case sensitive, mentre le parole chiave e i nomi delle funzioni
NON lo sono!
Per i newbie:
Che cosa vuol dire "case sensitive"? Significa che il PHP è
sensibile alla differenza tra maiuscole e minuscole, un po’ come i nomi dei
file in Unix: $pippo è diversa da $Pippo, che
a loro volta sono diverse da $PIPPO, ovvero le tre variabili dai
nomi simili possono avere valori diversi.
Un esempio per chiarire le idee:
print("Questa frase viene visualizzata");
PRINT("Ma anche la funzione PRINT() funziona :-)");
Come vedremo ora lo stesso discorso non vale con i nomi delle variabili:
$miavariabile = 1;
$MiaVariabile = 2;
echo $miavariabile;
echo $MiaVariabile;
Per chi programma in Visual Basic:
Ricordatevi che i nomi delle variabili sono case-sensitive, altrimenti perderete
delle ore a cercare bug che in realtà bug non sono...
Desidero dedicare un po’ più di attenzione agli array (in italiano anche
chiamati ‘matrici’). Gli array in PHP sono un ibrido tra gli array ordinati
e gli array associativi. Questo significa che è possibile utilizzare
la stessa sintassi per lavorare con entrambi i tipi di array, compresi gli array
indicizzati con numeri consecutivi a partire da 0, quelli indicizzati con stringhe,
quelli indicizzati con numeri non consecutivi e quelli indicizzati sia con numeri
che con stringhe. Questo di fatto li rende uno strumento potente e versatile,
capace di coprire molte esigenze nell’organizzazione dei dati.
Vediamo alcuni esempi:
$primo_array = array(2, 4, 5, 8, 9); // Questo array è contiene
numeri non
// consecutivi, ma è indicizzato da
// numeri interi consecutivi da 0 a 4
echo $primo_array[3]; // Visualizzerà sulla pagina il valore 8
$secondo_array = array("Uno" => 1,
"Due" => 2,
"Tre" => 3); // Questo è un array
// associativo indicizzato da stringhe.
// Quello che sta a sinistra dell’operatore ‘=>’ è l’indice, quello
che sta a
// destra è il valore associato a quell’indice.
echo $secondo_array["Due"]; // Visualizzerà il valore 2.
$terzo_array = array(5 => "Quinto",
"Sesto",
"Settimo",
"Ottavo");
// In questo caso gli indici dei valori
// successivi a "Quinto" verranno assegnati
// consecutivamente a partire da 6
echo $terzo_array[7]; // Visualizzerà il valore "Settimo".