PHP
Da Wikiversità, l'università aperta.
Questa lezione è incompleta
Tutti i contributi sono ben accetti perché sono state scritti pochi (o nessun) argomenti di questa lezione.
![]() PHP |
|
|---|---|
| Tipo di linguaggio | Scripting lato server |
| Ultima versione | 5.2.4 / 30/09/07 |
| Sviluppatore | PHP Group |
| Specifiche/Sito Web | http://www.php.net/ |
Indice |
[modifica] Introduzione
[modifica] Cos'è PHP
PHP, PHP Hypertext Processor (nella versione 1 Personal Home Page) è un linguaggio di scripting lato server. Il suo nome è un acronimo ricorsivo che sta per PHP: Hypertext Preprocessor (PHP: preprocessore di ipertesti). Il software MediaWiki, che gestisce i siti del progetto Wikipedia, è scritto in PHP. Il PHP è simile come sintassi al C e al Perl.
[modifica] Vantaggi e Svantaggi
[modifica] Concetti di base
[modifica] Integrare php nelle pagine
Una pagina php di solito ha l'estensione .php o .phtml e per eseguire uno script si deve scrivere:
<?php ... mio script ?>
<? ... mio script ?>
<script type="php"> ... mio script </script>
Gli ultimi due metodi sono però sconsigliati: il metodo di utilizzare i tag html non è riconosciuto da tutti i webserver e quindi si potrebbero incontrare molti problemi di incompatibilità; il metodo dei tag brevi (<? ?>), si sta piano piano abbandonando, a causa dell'introduzione dell'XHTML che comporta l'intestazione con <?xml ... ?> e se un server HTTP interpreta <? come php genererà un errore.
[modifica] Commenti
Per rendere più leggibile il codice si usano i commenti. I commenti non vengono letti dall'interprete quindi non influiscono molto sulla velocità di esecuzione. Ecco un esempio pratico di commenti:
<?php // Questo è un commento tipo C. Tutto quello che segue // sulla stessa riga viene ignorato. /* Commento in stile c++: Tutto quello compreso tra quei due tag viene ignorato anche se su più righe */ # Commento in stile perl: commento a riga singola. ?>
Ricorda: Non è possibile annidiare i commenti, una sintassi come
<?php // QUESTO CAUSA UN ERRORE // ora inizia il commento /* multi commento? no! perché non riconosce /*!!! */ ?>
è errata!
[modifica] Variabili
Una variabile può essere considerato come un contenitore di dati, il cui contenuto può cambiare nel corso dello script. A differenza di molti altri linguaggi il php non pretende la dichiarazione del tipo nel momento della inizializzazione della variabile. In php, a differenza del C, l'inizializzazione e la dichiarazione avvengono nello stesso momento. Per crea una variabile è sufficiente assegnargli un valore. Le variabili sono SEMPRE precedute dal simbolo del dollaro ($). Vediamo alcuni esempi:
<?php //Inizializzo una variabile intera $a = 20; //Inizializzo una stringa $b = "W Wikiversità!"; //Inizializzo un float/double $c = 2.3; ?>
Ricorda: PHP è un linguaggio Case Sensitive! Ciò significa che c'è differenza tra $wiki e $WIKI.
Una variabile che si crea si può anche distruggere. Questa azione normalmente non è necessaria, perché terminato lo script il PHP si occupa da solo di eliminarla. Può però tornare utile in alcune occasioni, quindi ecco la funzione:
//Inizializzo la variabile $a = 134; unset($a); //Elimino la variabile e dealloco la memoria utilizzata da essa //Qui la variabile non esiste più!
[modifica] Costanti
Una costante è un contenitore (come le variabili) che non può cambiare il suo contenuto nell'esecuzione dello script; questo comporta un minor utilizzo di memoria. In PHP è possibile dichiarare in due modi le constanti. Il modo più diffuso è quello di utilizzare la direttiva define:
<?php define("nome_costante","valore"); ?>
Un'altra sintassi possibile è quella di utilizzare la parola chiave const:
<?php class miaClasse { const COSTANTE = valore; public function miaFunzione() { // per utilizzare la costante bisogna utilizzare il costrutto self $variabile = self::COSTANTE * 5; } } ?>
La principale differenza tra l'uso del costrutto define e la const è che la prima dichiara una costante globale che si può utilizzare in tutte le parti di un progetto, mentre la visibilità di una costante dichiarata con la const è limitata unicamente alla classe all'interno della quale è dichiarata.
Vediamo ora un codice più complesso che implementa costanti e variabili:
<?php define("a",17); define("b",16); define("c",127); define("d",1); define("STRINGA","Il prodotto è: "); $prodotto=a*b; echo STRINGA.$prodotto; $prodotto=c*d; echo STRINGA.$prodotto; ?>
In php esistono costanti predefinite e riservate. Non è possibile dichiarare costanti con lo stesso nome (stessa cosa con le funzioni):
- __FILE__
- __LINE__
- PHP_VERSION
- PHP_OS
- TRUE
- FALSE
[modifica] Array
Questo argomento tratta variabili multidimensione. Se non hai esperienza con altri linguaggi di programmazione ti consigliamo di leggere prima gli operatori e le strutture di controllo
Un array è una variabile che possiede più dimensioni. Può essere considerato come un libro e ogni pagina corrisponde a una variabile. Il numero di variabili che un array può contenere è illimitato (sempre relativamente alla memoria disponibile al PHP). A differenza di un libro in cui le pagine vengono chiamate con dei numeri, il php ci permette di utilizzare anche stringhe per identificare le variabili. Il vantaggio degli array è che riduce la dimensione occupata dalle variabili stesso e mantiene il codice più ordinato evitando lo Spaghetti code.
Per capire a cosa servono gli array e come si utilizzano in PHP leggi la sezione dedicata
[modifica] Operatori
[modifica] Operatori matematici
Gli operatori matematici utilizzabili sono:
$a + $b Addizione
$a - $b Sottrazione
$a * $b Moltiplicazione
$a / $b Divisione
$a % $b Modulo (resto)
alcuni esempi sono
<?php $a = 5; $b = 3; $risultato = $a % $b; echo $risultato; ?> Risulterà 2
[modifica] Operatori di confronto
Gli operatori di confronto tra stringhe sono:
$a == $b Se contengono gli stessi dati
$a === $b Identici: se contengono gli stessi dati e sono dello stesso tipo (es. se sono numeri o valori letterali)
$a != $b Se $a è diverso da $b.
$a <> $b Se $a è diverso da $b.
$a !== $b Non identici: se $a è diverso da $b o se essi non sono dello stesso tipo.
$a < $b Se $a è minore di $b.
$a > $b Se $a è maggiore di $b.
$a <= $b Se $a è minore o uguale di $b.
$a >= $b Se $a è maggiore o uguale di $b.
[modifica] Strutture di controllo
[modifica] If
<?php $a = 1; if($a % 2 == 0) { echo $a.' è pari'; } else { echo $a.' è dispari'; } ?> Risulterà dispari.
[modifica] Switch
<?php $a = 'uno'; switch($a){ // Se $a è vuota default: echo 'Nessun numero!'; break; case 'uno': echo 'Sono il numero uno'; break; case 'due': echo 'Sono il numero due'; break; } ?> Risulterà "Sono il numero uno"
[modifica] Operatore Ternario
Sintassi
<?php /* se la condizione è vera restituisce il valore1 altrimenti restituisce il valore2 */ $variabile = condizione ? valore1 : valore2; ?>
Esempio
<?php $a = 1; $b = $a==1 ? "La variabile a vale uno" : "La variabile a è diversa da uno"; echo $b; ?> Risulterà "La variabile a vale uno"
[modifica] Cicli
[modifica] For
Sintassi
<?php for (assegnamenti_iniziali; condizioni_entrata_ciclo; istruzioni_uscita_di_ogni_ciclo) { istruzioni_ciclo; } ?>
Il ciclo for inizialmente applica gli assegnamenti indicati come assegnamenti_iniziali (che eventualmente possono essere omessi), poi verifica le condizioni_entrata_ciclo: se risultano vere si entra nel ciclo. All'uscita del ciclo vengono effettuate le istruzioni_uscita_ogni_ciclo e poi si verificano nuovamente le condizioni per stabilire se si deve ciclare un'altra volta oppure se si può uscire dal ciclo. Ovviamente si continua a ciclare fino a che le condizioni_entrata_ciclo non siano complaessivamente false. Per sua natura il ciclo for è usato principalmente per ciclare i valori di un vettore, per il resto il funzionamento è identico ad un ciclo while, tanto che i due costrutti possono essere interscambiabili.
Esempio
<?php $array = array("uno", "due", "tre", "quattro"); // dichiaro un array di quattro elementi // parti con l'indice uguale a 0 (in quanto gli array cominciano da 0 in php) // entra nel ciclo fino a quando l'indice $i è minore del numero di elementi dell'array (count($array)) // ad ogni ciclo incrementa l'indice di uno ($i++) for ($i=0; $i<count($array); $i++) { echo "Elemento $i: " . $array[$i] . "<br />"; } ?>
L'esempio stamperà:
Elemento 0: uno Elemento 1: due Elemento 2: tre Elemento 3: quattro
[modifica] Foreach
Sintassi
<?php foreach ($array as $array_element) { istruzioni_ciclo; } ?>
Il ciclo foreach è simile al ciclo for, solo che non necessita di indici o condizioni perché cicla direttamente dall'inizio alla fine di un insieme di valori, tipicamente un array. La variabile $array contiene l'insieme di valori, il ciclo scorrerà tutto l'array inserendo nella variabile $array_element il valore dell'elemento corrente dell'array. Il ciclo termina quando si giunge alla fine dell'array.
Esempio
<?php $array = array("uno", "due", "tre", "quattro"); // dichiaro un array di quattro elementi // per ogni elemento dell'array entra nel ciclo foreach ($array as $array_element) { echo $array_element . "<br />"; } ?>
L'esempio stamperà:
uno due tre quattro
[modifica] While
[modifica] Do While
[modifica] Variabili globali
[modifica] GET
Una delle variabili globali di PHP è $_GET['valore'] e restituisce il valore di una variabile passata attraverso il metodo GET.
Supponiamo di avere una pagina in un server locale chiamata "index.php" e di caricarla inserendo dei valori con sintassi GET alla fine. Per fare questo basta digitare l'indirizzo della pagina e, in seguito, aggiungere i valori.
http://localhost/index.php?esempio=67&pippo=163
A questa pagina passiamo due variabili: esempio, con valore uguale a 67, e pippo, con valore uguale a 163. Per far utilizzare questi dati il codice di index.php sarà più o meno questo:
<?php //assegno il valore della variabile $_GET['valore'] ad una nuova variabile appena dichiarata $esempio = $_GET['esempio']; $pippo = $_GET['pippo']; //mando in output il valore delle variabili appena prese echo $esempio." ".$pippo."\n"; //faccio la somma fra le due variabili $somma = $esempio + $pippo; echo "La somma è: ".$somma; //chiudo lo script ?>
In questo caso l'output sarà quindi:
67 163 La somma è: 230
Come ultima cosa correlata all'uso di GET e del passaggio di variabili occorre ricordare che un indirizzo web non può essere più lungo di 255 caratteri e che di conseguenza non possono essere inviati valori molto lunghi. Per il passaggio di valori grandi o che preferireste non far vedere nell'indirizzo considerate l'utilizzo del metodo POST.
[modifica] POST
Un'altra delle variabili globali di PHP è $_POST['valore'] e restituisce il valore di una variabile passata attraverso il metodo POST.
Per inviare dei dati attraverso il metodo POST ad una pagina web dobbiamo utilizzare un'altra pagina web con un form. Il codice sarà simile a questo:
Sorgente di "dati.php":
<html> <body> <form action="elab.php" method="POST"> <input type="text" name="esempio"> <input type="text" name="pippo"> <input type="submit"> </form> </body> </html>
In questo form passiamo le due variabili esempio e pippo alla pagina "elab.php". Il valore non è esplicito ma deve essere inserito nei campi del form. Per questo esempio supponiamo di inserire 10 nel primo campo di testo e 35 nel secondo campo.
La ricezione delle varibili è uguale a quella utilizzata con il metodo GET. Il codice risulta quindi questo:
Sorgente di "elab.php":
<?php //assegno il valore della variabile $_POST['valore'] ad una nuova variabile appena dichiarata $esempio = $_POST['esempio']; $pippo = $_POST['pippo']; //notiamo che a questo punto il programma risulta essere identico al programma con GET //mando in output il valore delle variabili appena prese echo $esempio." ".$pippo."\n"; //faccio la somma fra le due variabili $somma = $esempio + $pippo; echo "La somma è: ".$somma; //chiudo lo script ?>
In questo caso l'output sarà quindi:
10 35 La somma è: 45
Al contrario di GET, POST può inviare dati con limite di grandezza imposta dalla varibile post_max_size nel file di configurazione php.ini del proprio server. Generalmente questo limite si aggira intorno ai 3MB o superiori.
[modifica] Cookie
I Cookie con le sessioni sono una delle più usate caratteristiche di PHP e della programmazione web in generale perché usati come sistema per il Login/Logout. Generalmente quando apriamo una pagina web sappiamo che il client manda una richiesta http al server e che il server elabora il codice PHP (se dovesse esserci) e poi restituisce il risultato in html. Il problema si pone quando il server deve distinguere un client dall'altro o deve in poche parole riconoscere sempre lo stesso client. Dopotutto sarebbe molto stressante dover fare il login ad ogni pagina web che si cambia, giusto? Vengono quindi usati i cookies che sono dei file di testo che risiedono nel computer del client e che vengono inviati al server ogni qualvolta si carica una pagina. Con i cookies si possono memorizzare variabili che possono essere usate nelle applicazioni web attraverso la sintassi generica $_COOKIE['var'].
Ma vediamo subito come settare ed eliminare i cookies. Prima di tutto c'è da ricordarsi che i cookies fanno parte degli header http e che quindi devono essere inviati prima di qualsiasi output html. Questa è in dettaglio la funzione per settare i cookies in PHP:
<?php setcookie("nome_cookie", "valore_cookie", time()+3600); ?>
Come si piò capire il primo parametro della funzione sta ad indicare il nome del cookie, il secondo parametro indica il valore del cookie mentre il terzo indica il tempo di scadenza. Il cookie nell'esempio verrà cancellato automaticamente entro un'ora visto che 3600 secondi sono un'ora. Ma per cancellarli?
La cancellazione di cookie avviene in modo quasi identico con una piccola differenza: il tempo di scadenza.
<?php setcookie("nome_cookie", "valore_cookie", time()-3600); ?>
Questa funzione cancella un cookie immediatamente visto che il suo tempo di scadenza è negativo e impostato ad un'ora fa.
Una volta impostati dei cookie con dei valori, questi ultimi possono essere richiamati in modo quasi analogo a GET e POST in tutta la pagina in qualsiasi momento. Il codice sottostante ad esempio stampa il valore del cookie "esempio" supponendo che sia stato impostato.
<?php echo $_COOKIE['esempio']; ?>
Sono comunque stati ricontrati diverse impostazioni predefinite e modi di gestire i cookies nei vari browser e per questo è consigliabile fare uso anche di sessioni.
