php: strutture di controllo e funzioni

34
e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) Italy [email protected] - www.e-xtrategy.net Lorenzo Massacci l.massacci@e- xtrategy.net Linguaggi di Programmazione per il Web PHP – Hypertext Preprocessor

Upload: e-xtrategy-internet-way

Post on 12-Jan-2015

13.598 views

Category:

Technology


0 download

DESCRIPTION

Strutture di controllo in PHP e introduzione alle funzioni

TRANSCRIPT

Page 1: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Linguaggi di Programmazioneper il Web

PHP – Hypertext Preprocessor

Page 2: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Il comando PRINT

Il comando printprint (come il comando echoecho) può mandare in output qualunque tipo di dato.

<?php<?phpecho “Ciao mondo!”;echo “Ciao mondo!”;//print funziona allo stesso modo//print funziona allo stesso modoprint “Ciao mondo!”;print “Ciao mondo!”;

echo 123;echo 123;print 123;print 123;

$pippo = “Ciao mondo!”;$pippo = “Ciao mondo!”;echo $pippo; print $pippo; echo $pippo; print $pippo;

//possono essere scritti anche cosi//possono essere scritti anche cosiecho (“Ciao mondo!”);echo (“Ciao mondo!”);print (“Ciao mondo!”);print (“Ciao mondo!”);

?>?>

Page 3: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Sostituzione di variabili

Il php riesce a riconoscere (in fase di stampa) le variabile immerse all’interno delle strighe e lo fa grazie al $$.

<?php<?php$numero = 45;$numero = 45;$veicolo=“autobus”;$veicolo=“autobus”;echo “Questo $veicolo ha una capacita di $numero passeggeri”;echo “Questo $veicolo ha una capacita di $numero passeggeri”;

/*stamperà: Questo autobus ha una capacità di 45 passeggeri*//*stamperà: Questo autobus ha una capacità di 45 passeggeri*/?>?>

Se ho la necessita che dopo la variabile non ci sia uno spazio devo racchiudere la variabile tra {} {}

<?php<?php$memoria = 256;$memoria = 256;$messaggio=“il mio computer ha $memoriaMByte di ram”;$messaggio=“il mio computer ha $memoriaMByte di ram”;/*siccome non esiste nessuna variabile con il nome $memoriaMByte assegnarà a $messaggio: il mio /*siccome non esiste nessuna variabile con il nome $memoriaMByte assegnarà a $messaggio: il mio computer ha di ram*/computer ha di ram*/$messaggio=“il mio computer ha {$memoria}MByte di ram”;$messaggio=“il mio computer ha {$memoria}MByte di ram”;//assegnerà a messaggio: il mio computer ha 256MByte di ram//assegnerà a messaggio: il mio computer ha 256MByte di ram?>?>

ATTENZIONE: questo discorso vale solo per stringhe racchiuse tra virgolette e non tra apici

Page 4: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Conversioni tra i tipi

E’ possibile forzare conversione di una variabile da un tipo all’altro utilizzando le funzioni dette di “cast”

<?php<?php$pippo = (int) $var;$pippo = (int) $var;$pluto = (boolean) $var;$pluto = (boolean) $var;$paperino = (float) $var;$paperino = (float) $var;$topolino = (string) $var;$topolino = (string) $var;?>?>

Le funzioni prefedenti non trasformano il tipo di $var in modo permanente ma solo per l’operazione corrente.Se si vuole cambiare in modo permanente il il tipo di una variabile occorre utilizzare la funzione settypesettype

<?php<?php$var = 39;$var = 39;settype($var,”string”);settype($var,”string”);?>?>

Page 5: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Debug

Per tenere sotto controllo quello che succede in uno script ed individuare eventuali errori esistono alcune funzioni apposite per il backup:

<?php<?php//Per controllare il valore di una variabile://Per controllare il valore di una variabile:$pluto = “un topolino”+39;$pluto = “un topolino”+39;var_dump($pluto);var_dump($pluto);//verrà stampato: int(39)//verrà stampato: int(39)?>?>

La funzione print_r print_r è utile per stampare array in modo strutturato:

<?php<?php$prova = array(“blu”,”rosso”);$prova = array(“blu”,”rosso”);print_r($prova);print_r($prova);/*verrà stampato:/*verrà stampato:ArrayArray(( [0] => blu [0] => blu [1] => rosso [1] => rosso))*/*/?>?>

Page 6: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Assegnazione per riferimento

Quando si effettua un assegnazione il valore di una variabile viene copiato in un’altra:

<?php<?php$a = 5;$a = 5;$b = $a;$b = $a;/*Abbiamo 2 variabili (a e b) con lo stesso valore (5) *//*Abbiamo 2 variabili (a e b) con lo stesso valore (5) */?>?>

Utilizzando l’operatore && è possibile invece fare in modo che due variabili puntino alla stessa casella di memoria:

<?php<?php$a = 5;$a = 5;$b = &$a;$b = &$a;//se modifichiamo $a cambia anche $b//se modifichiamo $a cambia anche $b$a = $a+1;$a = $a+1;echo $b; echo $b; //stamperà 6//stamperà 6?>?>

Page 7: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le variabili GET e POST

Per poter rendere DINAMICO un sito web grazie al linguaggio PHP è necessario che sia possibile passare dei valori in ingresso ai nostri script.

Il metodo GET consiste nell'accodare i dati all'indirizzo della pagina richiesta, facendo seguire il nome della pagina da un punto interrogativo e dalle coppie nome/valore dei dati che ci interessano. Nome e valore sono separati da un segno di uguale. Le diverse coppie nome/valore sono separate dal segno '&'.

<a href="prodotto.php?cod=a7&cat=2"><a href="prodotto.php?cod=a7&cat=2">

Page 8: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le variabili GET e POST

La stringa che si trova dopo il punto interrogativo, contenente nomi e valori dei parametri, viene detta query string.

Quando la pagina prodotto.php viene richiamata in questo modo, essa avrà a disposizione, al suo interno, un particolare array $_GET$_GET dove le chiavi sono i nomi dei parametri e i valori corrispondono ai valori dei paramentri.

$_GET[‘cod’] conterrà ‘a7’

$_GET[‘cat’] conterrà 2

Page 9: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le variabili GET e POST

Il metodo POST viene utilizzato con i moduli: quando una pagina HTML contiene un tag <form>, uno dei suoi attributi è "method", che può valere GET o POST. Se il metodo è GET, i dati vengono passati nella query string, come abbiamo visto prima. Se il metodo è POST, i dati vengono invece inviati in maniera da non essere direttamente visibili per l'utente, attraverso la richiesta HTTP che il browser invia al server.

I dati che vengono passati attraverso il metodo POST sono memorizzati nell'array $_POST. Questo array si comporta esattamente come $_GET:

<form action="elabora.php" method="post"><form action="elabora.php" method="post"><input type="text" name="nome"> <input type="text" name="nome"> <input type="submit" name="submit" value="invia"><input type="submit" name="submit" value="invia"></form></form>

Avremo:

$_POST[‘nome’]$_POST[‘nome’] che conterrà il valore che l’utente ci scriverà dentro

Page 10: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: condizioni (IF)if ($nome == 'Luca') if ($nome == 'Luca')   echo ‘ciao Luca!<br>’;   echo ‘ciao Luca!<br>’;

Dopo l'if, deve essere indicata fra parentesi un'espressione da valutare (condizione). Dunque, se la condizione è vera, l'istruzione successiva viene eseguita. In caso contrario, viene ignorata.

Potremmo anche avere la necessità di eseguire, nel caso in cui la condizione sia vera, non una sola ma più istruzioni. Dobbiamo ricordarci di comprendere questo blocco di istruzioni fra due parentesi graffe:

if ($nome == 'Luca') {if ($nome == 'Luca') {  echo ‘ciao Luca!<br>’;  echo ‘ciao Luca!<br>’;  echo ‘dove sono i tuoi amici?<br>’;  echo ‘dove sono i tuoi amici?<br>’;}}echo ‘ciao a tutti voi’; echo ‘ciao a tutti voi’;

Dobbiamo notare un particolare: per la prima volta, vediamo che in questo costrutto mancano i punto e virgola. Infatti la 'if' e la condizione espressa fra parentesi non devono averli.

Page 11: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: condizioni (IF...ELSE)if ($nome == 'Luca') {if ($nome == 'Luca') {  echo ‘bentornato Luca!’;  echo ‘bentornato Luca!’;} else {} else {  echo “ciao $nome !”;  echo “ciao $nome !”;} }

La parola chiave 'else', che significa 'altrimenti', deve essere posizionata subito dopo la parentesi graffa di chiusura del codice previsto per il caso 'vero'. Anche per 'else' valgono le stesse regole: niente punto e virgola, parentesi graffe obbligatorie se dobbiamo esprimere più di un'istruzione, altrimenti facoltative.

Le istruzioni 'if' possono essere nidificate una dentro l'altra. Esempio:

if ($nome == 'Luca') {if ($nome == 'Luca') {  if ($cognome == 'Rossi') {  if ($cognome == 'Rossi') {    echo "Luca Rossi &egrave; di nuovo fra noi";    echo "Luca Rossi &egrave; di nuovo fra noi";  } else {  } else {    echo "Abbiamo un nuovo Luca!";    echo "Abbiamo un nuovo Luca!";  }  }} else {} else {  echo ‘ciao’ . $nome . ‘!’;  echo ‘ciao’ . $nome . ‘!’;} }

Page 12: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: condizioni (IF...ELSE)Esercizio 1: Creare una form che permette di inserire un numero e al sumbit Esercizio 1: Creare una form che permette di inserire un numero e al sumbit richiamare un PHP che stampi a video se il numero è pari o dispari.richiamare un PHP che stampi a video se il numero è pari o dispari.

Esercizio 2: Creare una form che permette di inserire 2 numeri e al submit richiamare Esercizio 2: Creare una form che permette di inserire 2 numeri e al submit richiamare un PHP che stampi a video se il primo numero è divisibile per il secondo e viceversaun PHP che stampi a video se il primo numero è divisibile per il secondo e viceversa

Esercizio 3: Creare una form che permette di inserire 2 numeri e al submit richiamare Esercizio 3: Creare una form che permette di inserire 2 numeri e al submit richiamare un PHP che stampi a video il maggiore dei 2un PHP che stampi a video il maggiore dei 2

Esercizio 4: Creare una form che permette di inserire 3 numeri e al submit richiamare Esercizio 4: Creare una form che permette di inserire 3 numeri e al submit richiamare un PHP che li stampa a video in ordine crescenteun PHP che li stampa a video in ordine crescente

Page 13: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: l’operatore ternario

L'operatore ternario è così chiamato perchè è formato da tre espressioni: il valore restituito è quello della seconda o della terza di queste espressioni, a seconda che la prima sia vera o falsa. In pratica, si può considerare, in certi casi, una maniera molto sintetica di effettuare una if.

$aggettivo = ($altezza >= 180) ? 'alto' : 'normale' ;$aggettivo = ($altezza >= 180) ? 'alto' : 'normale' ;

La variabile $aggettivo prenderà il valore 'alto' se la variabile $altezza è maggiore o uguale a 180, e 'normale' nel caso opposto. Come vediamo, l'espressione condizionale è contenuta fra parentesi e seguita da un punto interrogativo, mentre due punti separano la seconda espressione dalla terza. Questo costrutto può essere utilizzato, ad esempio, per valorizzare velocemente una variabile senza ricorrere all'if:

if ($altezza >= 180)if ($altezza >= 180) $tipologia = 'alto' ; $tipologia = 'alto' ; elseelse $tipologia = 'normale'; $tipologia = 'normale';

Page 14: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: condizioni (SWITCH)

switch ($nome) {switch ($nome) {  case 'Luca':  case 'Luca':        echo “E' tornato Luca!”;echo “E' tornato Luca!”;    break;    break;  case 'Mario':  case 'Mario':       echo ‘Ciao, Mario!’; echo ‘Ciao, Mario!’;    break;    break;  default:  default:        echo ‘Benvenuto, chiunque tu sia’;echo ‘Benvenuto, chiunque tu sia’;}}

L'istruzione 'switch' prevede che indichiamo, fra parentesi, un'espressione che verrà valutata per il suo valore. Di seguito, tra parentesi graffe, esprimeremo una serie di espressioni da confrontare con quella indicata prima: dal momento in cui ne trova una il cui valore è uguale, PHP esegue il codice indicato di seguito, fino a quando non incontra un'istruzione 'break'. L'istruzione 'default' può essere indicata come 'ultimo caso', che si considera verificato quando nessuno dei casi precedenti è risultato vero. L'indicazione 'default' può anche essere assente, ma quando c'è deve essere l'ultima della switch.

Page 15: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (WHILE)

Il ciclo 'while' può essere considerato come una specie di 'if' ripetuta più volte: infatti la sua sintassi prevede che alla parola chiave 'while' segua, fra parentesi, la condizione da valutare, e fra parentesi graffe, il codice da rieseguire fino a quando tale condizione rimane vera.

$mul = 1;$mul = 1;while ($mul <= 10) {while ($mul <= 10) {  $ris = 5 * $mul;  $ris = 5 * $mul;  echo “5 * “ . $mul . “ = “ . $ris . “<br />”;  echo “5 * “ . $mul . “ = “ . $ris . “<br />”;  $mul++;  $mul++;} }

Il ciclo 'while', rispetto al 'for', non ci mette a disposizione le istruzioni per inizializzare e per incrementare il contatore: quindi dobbiamo inserire queste istruzioni nel flusso generale del codice, per cui mettiamo l'inizializzazione prima del ciclo, e l'incremento all'interno del ciclo stesso, in fondo. Anche in questa situazione, comunque, il concetto fondamentale è che l'esecuzione del ciclo termina quando la condizione fra parentesi non è più verificata.

Page 16: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (DO…WHILE)

Esiste un'altra forma, simile al 'while', con la quale possiamo assicurarci che il codice indicato tra le parentesi graffe venga eseguito almeno una volta: si tratta del 'do...while'

$mul = 1;$mul = 1; //se mettessi 11 verrebbe eseguito comunque una voltado {do {  $ris = 5 * $mul;  $ris = 5 * $mul;  echo “5 * “ . $mul . “ = “ . $ris . “<br />”;  echo “5 * “ . $mul . “ = “ . $ris . “<br />”;  $mul++;  $mul++;} while ($mul <= 10) ;} while ($mul <= 10) ;

Il 'while' viene spostato dopo il codice da ripetere, ad indicare che la valutazione della condizione viene eseguita solo dopo l'esecuzione del codice fra parentesi graffe.

Page 17: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (FOR)

Iniziamo subito con un esempio: supponiamo di voler mostrare i multipli da 1 a 10 di un numero, ad esempio 5

for ($mul = 1; $mul <= 10; $mul++) {for ($mul = 1; $mul <= 10; $mul++) {  $ris = 5 * $mul;  $ris = 5 * $mul;  echo ‘5 * ‘ . $mul . ‘ = ‘ . $ris . ‘<br>’;  echo ‘5 * ‘ . $mul . ‘ = ‘ . $ris . ‘<br>’;} }

Questo costrutto utilizza la parola chiave 'for', seguita, fra parentesi, dalle istruzioni per definire il ciclo; di seguito, si racchiudono fra parentesi graffe tutte le istruzioni che devono essere eseguite ripetutamente.

Le tre istruzioni inserite fra le parentesi tonde vengono trattate in questo modo:la prima viene eseguita una sola volta, all'inizio del ciclo;la terza viene eseguita alla fine di ogni iterazione del ciclo;la seconda deve essere una condizione, e viene valutata prima di ogni iterazione del ciclo: quando risulta falsa, l'esecuzione del ciclo viene interrotta. Quando invece è vera, le istruzioni fra parentesi graffe vengono eseguite.

Page 18: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (CONTINUE - BREAK)

Uscire da un ciclo. PHP termina l'esecuzione di un ciclo quando la condizione a cui è sottoposto non è più verificata.

Ppossiamo però dire a PHP di non completare la presente iterazione e passare alla successiva (con 'continuecontinue') oppure di interrompere definitivamente l'esecuzione del ciclo (con 'breakbreak'). Vediamo un esempio:

for ($ind = 1; $ind < 500; $ind++) {for ($ind = 1; $ind < 500; $ind++) {  if ($ind % 100 == 0) {  if ($ind % 100 == 0) {    break;    break;  }elseif ($ind % 25 == 0) {  }elseif ($ind % 25 == 0) {    continue;    continue;  }  }  echo ‘valore: ‘.$ind.’<br>’;  echo ‘valore: ‘.$ind.’<br>’;} }

Il cicolo si ripeterà solo 100 volte anziché 500 e i valori multipli di 25 non verranno stampati

Page 19: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: condizioni (SWITCH)Esercizio 1: Creare una form che permette di inserire 2 numeri e che permette di Esercizio 1: Creare una form che permette di inserire 2 numeri e che permette di scegliere da un menù a tendina (+,-,*,/,%) l’operazione da compiere e al sumbit scegliere da un menù a tendina (+,-,*,/,%) l’operazione da compiere e al sumbit richiamare un PHP che stampi a video il risultato dell’operazione.richiamare un PHP che stampi a video il risultato dell’operazione.

Esercizio 2: Aggiungere all’esercizio precedente il controlli per evitare di dividere per Esercizio 2: Aggiungere all’esercizio precedente il controlli per evitare di dividere per 0 stampando in quel caso un messaggio di errore personalizzato. Aggiungere anche 0 stampando in quel caso un messaggio di errore personalizzato. Aggiungere anche il controllo che i due numeri siano stati effettivamente inseriti.il controllo che i due numeri siano stati effettivamente inseriti.

Page 20: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (FOR)

Esercizio 1: Creare una form che permette di inserire un numero e al submit Esercizio 1: Creare una form che permette di inserire un numero e al submit richiamare un PHP che stampi a video (in una tabella XHTML) la tabellina (dall’1 al richiamare un PHP che stampi a video (in una tabella XHTML) la tabellina (dall’1 al 10) del numero dato in input. (fare l’esercizio usando i diversi modi di gestire i cicli)10) del numero dato in input. (fare l’esercizio usando i diversi modi di gestire i cicli)

Esercizio 2: modificare l’esercizio precedente in modo che sia possibile scegliere il Esercizio 2: modificare l’esercizio precedente in modo che sia possibile scegliere il numero di partenza e il numero di arrivo della tabellinanumero di partenza e il numero di arrivo della tabellina

Page 21: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Gli arrayEsempio di array:

$colori = array('bianco', 'nero', 'giallo', 'verde', 'rosso'); $colori = array('bianco', 'nero', 'giallo', 'verde', 'rosso');

In questo modo, PHP associa a ciascuno dei valori che abbiamo elencato un indice numerico, a partire da 0. Per riferirsi ad un singolo elemento dell'array si indica il nome dell'array seguito dall'indice contenuto fra parentesi quadre:

Esiste poi un metodo per aggiungere un valore all'array; questo metodo può essere usato anche, come alternativa al precedente, per definire l'array:

$colori[] = 'blu';$colori[] = 'blu';

Con questo codice verrà creato un nuovo elemento nell'array $colori, che avrà l'indice 5. Questa sintassi è valida anche per definire un array: infatti, se l'array $colori non fosse ancora definito, questa istruzione lo avrebbe definito creando l'elemento con indice 0.

$colori[3] = 'arancio'; $colori[7] = 'viola';$colori[3] = 'arancio'; $colori[7] = 'viola';

L'elemento con indice 3, che prima valeva 'verde', avrà il valore cambiato in 'arancio'. Inoltre avremo un nuovo elemento, con indice 7, con il valore 'viola'. Dopo queste istruzioni, l’array ha un "buco", perchè dal codice 5 si salta direttamente al codice 7: se useremo di nuovo l'istruzione di "incremento" con le parentesi quadre vuote, il nuovo elemento prenderà l'indice 8.

Page 22: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Gli arrayG indici degli elementi non sono necessariamente numerici. Possono essere anche delle stringhe e le chiavi numeriche e stringa possono coesistere nello stesso array.

$formazione[1] ='Buffon';$formazione[1] ='Buffon';$formazione[2] ='Panucci';$formazione[2] ='Panucci';$formazione[3] ='Nesta'; $formazione[3] ='Nesta'; ….….$formazione[11] ='Vieri'; $formazione[11] ='Vieri'; $formazione['ct'] = 'Trapattoni';$formazione['ct'] = 'Trapattoni';

Abbiamo creato un array con dodici elementi, di cui undici con chiavi numeriche, ed uno con chiave associativa. Se in seguito volessimo aggiungere un elemento usando le parentesi quadre vuote, il nuovo elemento prenderà l'indice 12. Avremmo potuto creare lo stesso array usando l'istruzione di dichiarazione dell'array, così:

$formazione = array(1 => 'Buffon', 'Panucci', 'Nesta', …, 'Vieri', 'ct' => $formazione = array(1 => 'Buffon', 'Panucci', 'Nesta', …, 'Vieri', 'ct' => 'Trapattoni'); 'Trapattoni');

Analizziamo il formato di questa istruzione

Page 23: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Gli arrayAlcuni esempi:

$persona['nome'] = 'Mario'; $persona['nome'] = 'Mario'; //corretto//corretto

$persona[cognome] = 'Rossi'; $persona[cognome] = 'Rossi'; /*funziona, ma genera un errore 'notice'*//*funziona, ma genera un errore 'notice'*/

echo $persona['cognome']; echo $persona['cognome']; //stampa 'Rossi': corretto//stampa 'Rossi': corretto

echo "ciao $persona['nome']"; echo "ciao $persona['nome']"; //NON FUNZIONA, GENERA ERRORE//NON FUNZIONA, GENERA ERRORE

echo "ciao " . $persona['nome'];echo "ciao " . $persona['nome'];/*corretto: come alternativa, usiamo il punto per concatenare*/ /*corretto: come alternativa, usiamo il punto per concatenare*/

echo "ciao {$persona['nome']} ";echo "ciao {$persona['nome']} ";/*corretto: usiamo le graffe*/ /*corretto: usiamo le graffe*/

Page 24: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Gli array a più dimensioniUn array a più dimensioni è un array nel quale uno o più elementi sono degli array a loro volta. Supponiamo di voler raccogliere in un array i dati anagrafici di più persone: per ogni persona registreremo nome, cognome

$persone = array( $persone = array( array('nome' => 'Mario', 'cognome' => 'Rossi'), array('nome' => 'Mario', 'cognome' => 'Rossi'), array('nome' => 'Paolo', 'cognome' => 'Bianchi'), array('nome' => 'Paolo', 'cognome' => 'Bianchi'), array('nome' => 'Luca', 'cognome' => 'Verdi') array('nome' => 'Luca', 'cognome' => 'Verdi')););

print $persone[0]['cognome']; // stampa 'Rossi'print $persone[0]['cognome']; // stampa 'Rossi'print $persone[2]['nome']; // stampa 'Luca' print $persone[2]['nome']; // stampa 'Luca'

Vediamo un altro esempio:

$persone = array($persone = array( 1 => array('nome' => 'Mario Rossi', 'residenza' => 'Roma', 'ruolo' => 'impiegato'), 1 => array('nome' => 'Mario Rossi', 'residenza' => 'Roma', 'ruolo' => 'impiegato'), 2 => array('nome' => 'Paolo Verdi', 'residenza' => 'Torino‘, ‘ruolo’ => ‘operaio’), 2 => array('nome' => 'Paolo Verdi', 'residenza' => 'Torino‘, ‘ruolo’ => ‘operaio’), 'totale_elementi' => 2 'totale_elementi' => 2););

print $persone[1]['residenza']; // stampa 'Roma'print $persone[1]['residenza']; // stampa 'Roma'print $persone['totale_elementi']; // stampa '2'print $persone['totale_elementi']; // stampa '2'

Page 25: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Strutture di controllo: cicli (FOREACH)

Esiste un ultimo tipo di ciclo, ed è un ciclo particolare perché é costruito appositamente per il trattamento degli array: si tratta del 'foreach'. Questo ci permette di costruire un ciclo che viene ripetuto per ogni elemento dell'array che gli passiamo. La sintassi è la seguente:

foreach ($arr as $chiave => $valore) {foreach ($arr as $chiave => $valore) {  ....istruzioni da ripetere....  ....istruzioni da ripetere....}}

All'interno delle parentesi graffe avremo a disposizione, nelle due variabili che abbiamo definito $chiave e $valore, l'indice e il contenuto dell'elemento che stiamo trattando. E' da notare che, nel caso ci interessi soltanto il valore e non la chiave (ad esempio perché le chiavi sono numeriche), possiamo anche evitare di estrarre la chiave stessa:

foreach ($arr as $valore) {foreach ($arr as $valore) {  ....istruzioni da ripetere....  ....istruzioni da ripetere....}}

Page 26: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Gli Array

Esercizio 1:Creare un form che permetta di inserire 10 numeri. Creare un PHP per Esercizio 1:Creare un form che permetta di inserire 10 numeri. Creare un PHP per memorizzare i 10 numeri in un array e che mostri il Maggiore, il Minore e la Media tra memorizzare i 10 numeri in un array e che mostri il Maggiore, il Minore e la Media tra i 10 numeri.i 10 numeri.

Esercizio 2: Dato un array iniziale che contiene 10 numeri (ad esempio: Esercizio 2: Dato un array iniziale che contiene 10 numeri (ad esempio: array(45,56,32,900,76,5,333,4,1,20) ) )Creare una form che chieda al navigatore di indovinare quali sono i 10 numeri. Creare una form che chieda al navigatore di indovinare quali sono i 10 numeri. Creare il PHP che verifica i numeri inseriti e che stampi a video quali e quanti numeri Creare il PHP che verifica i numeri inseriti e che stampi a video quali e quanti numeri sono stati indovinati.sono stati indovinati.DIAMO PER SCONTATO CHE I NUMERI SIANO TUTTI DIVERSIDIAMO PER SCONTATO CHE I NUMERI SIANO TUTTI DIVERSI

Page 27: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le funzioniUna funzione è un insieme di istruzioni che hanno lo scopo di eseguire determinate operazioni. Le funzioni ci consentono di non dover riscrivere il codice ogni volta che abbiamo la necessità di rieseguire quelle operazioni: ci basta infatti richiamare l'apposita funzione, fornendole i parametri di cui ha bisogno per la sua esecuzione.

Ciò che caratterizza le funzioni, è il fatto di richiedere parametri (quali e quanti), nonché quello di restituire o meno un valore.

La sintassi con la quale si richiama una funzione, cioé si chiede a PHP di eseguirla, è molto semplice:

nome_funzione();nome_funzione();

Si tratta semplicemente di indicare il nome della funzione, seguito da parentesi tonde, che devono contenere i parametri da passare alla funzione, ma vanno obbligatoriamente indicate anche se non ci sono parametri. Nel caso poi in cui la funzione restituisca un valore, possiamo indicare la variabile che utilizzerà questo valore:

$valore = nome_funzione();$valore = nome_funzione();

Page 28: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le principali funzioni in PHP

Le funzioni possono essere incorporate nel linguaggio oppure definite dall'utente. Esistono moltissime funzioni incorporate in PHP che possono essere utilizzate per gli usi più disparati.

E’ ovviamente impossibile conoscerle tutte a memoria, diventa quindi importante avere a disposizione un manuale del linguaggio PHP e saperlo leggere.

Il miglior manuale a disposizione è presente all’indirizzo http://www.php.net ed ha una particolarità proprio per le funzioni:digitando http://www.php.net/nome_funzione viene proposta direttamente la pagina relativa del manuale

D’ora in poi quando parleremo di funzioni utilizzeremo la notazione e che viene utilizzata dal sito www.php.net

Page 29: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le principali funzioni in PHP (funzioni sulle variabili)

bool empty ( mixed var)

verifica se la variabile che le passiamo è vuota oppure no. Per 'vuota' si intende che la variabile può contenere una stringa vuota ‘’ o un valore numerico pari a 0, ma può anche essere non definita o essere impostata al valore NULL. Restituisce un valore booleano (vero o falso).

bool isset ( mixed var [, mixed var [, ...]])

verifica se la variabile è definita. Una variabile risulta non definita quando non è stata inizializzata o è stata impostata col valore NULL. Restituisce un valore booleano.

bool is_null ( mixed var)

verifica se la variabile equivale a NULL. Restituisce un valore booleano.

Page 30: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le principali funzioni in PHP (funzioni sulle variabili)

bool is_int ( mixed var)verifica se la variabile è di tipo intero. Restituisce un valore booleano.

bool is_float ( mixed var)verifica se la variabile è di tipo numerico double (o float). Restituisce un valore booleano.

bool is_string ( mixed var)verifica se la variabile è di tipo stringa. Restituisce un valore booleano.

bool is_array ( mixed var)verifica se la variabile è di tipo array. Restituisce un valore booleano.

bool is_numeric ( mixed var)verifica se la variabile contiene un valore numerico. Nel caso di una stringa che contiene valori numerici. restituisce vero. Restituisce un valore booleano.

Page 31: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le principali funzioni in PHP (funzioni sulle variabili)

bool print_r ( mixed expression [, bool return]) stampa (direttamente sul browser) informazioni relative al contenuto della variabile che le abbiamo passato. E' utile in fase di debug, quando a seguito di comportamenti 'strani' del nostro script vogliamo verificare il contenuto di certi dati. Se il valore passato è un array, la funzione ne evidenzia le chiavi ed i valori relativi. Restituisce un valore booleano.

void unset ( mixed var [, mixed var [, mixed ...]]) distrugge la variabile specificata. In realtà non si tratta di una funzione, ma di un costrutto del linguaggio, e ne abbiamo già parlato. Dopo l'unset(), l'esecuzione di empty() o is_null() sulla stessa variabile restituirà vero, mentre isset() restituirà falso. Non restituisce valori.

Page 32: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Le principali funzioni in PHPfunzioni sulle variabiliVediamo ora qualche esempio:

$b = empty($a); $b = empty($a); //$a non è ancora definita, quindi $b sarà true//$a non è ancora definita, quindi $b sarà true$a = 5;$a = 5;$b = isset($a); $b = isset($a); //true//true$b = is_float($a); $b = is_float($a); //false: $a è un intero//false: $a è un intero$b = is_string($a); $b = is_string($a); //false//false

$a = '5';$a = '5';$b = is_int($a); $b = is_int($a); //false: $a ora è una stringa//false: $a ora è una stringa$b = is_string($a); $b = is_string($a); //true//true$b = is_numeric($a); $b = is_numeric($a); //true: la stringa ha un contenuto numerico//true: la stringa ha un contenuto numerico

unset($a); //eliminiamo la variabile $a;$b = isset($a); //false

Solitamente queste funzioni vengono usate come argomenti di condizioni if:

if (empty($a)) {if (empty($a)) { print ('$a è vuota o non definita!'); print ('$a è vuota o non definita!');} else {} else { print ('$a contiene un valore'); print ('$a contiene un valore');}}

Page 33: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

EsercizioProviamo a costruire una semplice calcolatrice:

Step1: create una pagina chiamata calcola.php e date due variabili $a e $b scrivete il codice che ne faccia la somma,la sottrazione, la moltiplicazione, la divisione e il modulo

Step2: modificate il codice in modo che le variabili $a e $b arrivino come parametri in GET

Step3: create una altra pagina chiamata index.php dove tramite una form permettete di inviare i valori per le variabili $a e $b alla pagina calcola.php

Step4: modificate la pagina calcola.php in modo che l’operazione da eseguire venga stabilita in base al valore di un parametro in GET

Step5: modificate la pagina index.php in modo che ci sia un menù a tendina (generato dinamicamente) per scegliere l’operazione da fare

Step6: aggiungente controlli per assicurare l’assenza di errori (divisione per 0, verifica dei tipi di variabili, verifica dei campi obbligatori ecc…)

Page 34: PHP: strutture di controllo e funzioni

e-xtrategy - Via G. Salvemini, 1 60035 JESI (AN) [email protected] - www.e-xtrategy.net

Lorenzo Massacci

[email protected]

Grazie per l’attenzione.

Lorenzo Massacci

[email protected]