Index
PHP
JavaScript
Forum
Guestbook
Linux

  

Premessa

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").

Introduzione

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.


La sintassi

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).

Il punto e virgola

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.

I commenti

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.


Le variabili

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.

Caratteri speciali

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.


Maiuscole e minuscole

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...

Array

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".



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 \\ \