introduzione a php 5 corso interazione uomo – macchina aa 2005/2006

61
Introduzione a PHP 5 Introduzione a PHP 5 Corso Interazione Uomo – Corso Interazione Uomo – Macchina Macchina AA 2005/2006 AA 2005/2006

Upload: cesare-boni

Post on 01-May-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Introduzione a PHP 5Introduzione a PHP 5

Corso Interazione Uomo – Corso Interazione Uomo – MacchinaMacchina

AA 2005/2006AA 2005/2006

Page 2: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Un po' di storia 1/2Un po' di storia 1/2

• A metà degli anni Novanta il Web era ancora formato in A metà degli anni Novanta il Web era ancora formato in gran parte da pagine statiche, cioè da documenti HTML gran parte da pagine statiche, cioè da documenti HTML il cui contenuto non poteva cambiare fino a quando il cui contenuto non poteva cambiare fino a quando qualcuno non interveniva manualmente a modificarloqualcuno non interveniva manualmente a modificarlo

• PHP nasce nel 1994, ad opera di Rasmus Lerdorf, come PHP nasce nel 1994, ad opera di Rasmus Lerdorf, come una serie di macro la cui funzione era quella di una serie di macro la cui funzione era quella di facilitare ai programmatori l'amministrazione delle facilitare ai programmatori l'amministrazione delle home page personali: da qui trae origine il suo nome, home page personali: da qui trae origine il suo nome, che allora significava appunto che allora significava appunto Personal Home PagePersonal Home Page

• Essendo un progetto di tipo open source, ben presto si Essendo un progetto di tipo open source, ben presto si formò una ricca comunità di sviluppatori che portò alla formò una ricca comunità di sviluppatori che portò alla creazione di PHP3creazione di PHP3

• Alla fine del 1998 erano circa 250.000 i server Web che Alla fine del 1998 erano circa 250.000 i server Web che supportavano PHP: un anno dopo superavano il milionesupportavano PHP: un anno dopo superavano il milione

Page 3: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• I 2 milioni furono toccati in aprile del 2000, e alla fine dello I 2 milioni furono toccati in aprile del 2000, e alla fine dello stesso anno erano addirittura 4.800.000. Il 2000 è stato stesso anno erano addirittura 4.800.000. Il 2000 è stato sicuramente l'anno di maggiore crescita del PHP, coincisa sicuramente l'anno di maggiore crescita del PHP, coincisa anche con il rilascio della versione 4.0.0, con un nuovo motore anche con il rilascio della versione 4.0.0, con un nuovo motore (Zend) molto più veloce del precedente ed una lunga serie di (Zend) molto più veloce del precedente ed una lunga serie di nuove funzioni, fra cui quelle importantissime per la gestione nuove funzioni, fra cui quelle importantissime per la gestione delle sessionidelle sessioni

• La crescita di PHP, nonostante sia rimasta bloccata fra luglio e La crescita di PHP, nonostante sia rimasta bloccata fra luglio e ottobre del 2001, è poi proseguita toccando quota 7.300.000 ottobre del 2001, è poi proseguita toccando quota 7.300.000 server alla fine del 2001, per superare i 10 milioni alla fine del server alla fine del 2001, per superare i 10 milioni alla fine del 2002, quando è stata rilasciata la versione 4.3.0.2002, quando è stata rilasciata la versione 4.3.0.

• Oggi PHP è conosciuto come Oggi PHP è conosciuto come PHP: Hypertext PreprocessorPHP: Hypertext Preprocessor, , ed è un linguaggio completo di scripting, sofisticato e ed è un linguaggio completo di scripting, sofisticato e flessibile, che può girare praticamente su qualsiasi server flessibile, che può girare praticamente su qualsiasi server Web, su qualsiasi sistema operativo (Windows o Unix/Linux, Web, su qualsiasi sistema operativo (Windows o Unix/Linux, ma anche Mac, AS/400, Novell, OS/2 e altri), e consente di ma anche Mac, AS/400, Novell, OS/2 e altri), e consente di interagire praticamente con qualsiasi tipo di database (MySql, interagire praticamente con qualsiasi tipo di database (MySql, PostgreSql, Sql Server, Oracle, SyBase, Access e altri)PostgreSql, Sql Server, Oracle, SyBase, Access e altri)

Un po' di storia 2/2Un po' di storia 2/2

Page 4: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Cos'èCos'è

• È un linguaggio di programmazione di tipo È un linguaggio di programmazione di tipo scripting (Bash, Tcl, Javascript, Perl, …):scripting (Bash, Tcl, Javascript, Perl, …):– Interpretato (non compilato)Interpretato (non compilato)– Tipizzazione minima (casting implicito)Tipizzazione minima (casting implicito)– Esecuzione di comandi di shellEsecuzione di comandi di shell

• È un linguaggio procedurale con estensioni È un linguaggio procedurale con estensioni ad oggettiad oggetti

• È un linguaggio di programmazione È un linguaggio di programmazione utilizzato per lo sviluppo di pagine web utilizzato per lo sviluppo di pagine web dinamiche “lato server”dinamiche “lato server”

• Quando un browser richiede una pagina Quando un browser richiede una pagina PHP, il server processa i comandi PHP in PHP, il server processa i comandi PHP in essa ed invia i risultati al browseressa ed invia i risultati al browser

Page 5: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Dinamicità e Web: ClientDinamicità e Web: Client

• Dinamicità “lato client”Dinamicità “lato client”– Presentazione dinamica:Presentazione dinamica:

•filtraggio dei contenuti ricevuti dal server.filtraggio dei contenuti ricevuti dal server.

•maggiore interazione coi contenuti (nuovi media, maggiore interazione coi contenuti (nuovi media, mappe, menu, interattori, ...).mappe, menu, interattori, ...).

•migliore organizzazione dei contenuti e del migliore organizzazione dei contenuti e del layout.layout.

• ......

– Tecnologie: Tecnologie: • Javascript.Javascript.

•Applet Java.Applet Java.

• ......

Page 6: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Dinamicità lato ClientDinamicità lato Client

• Il browser richiede al server una pagina Il browser richiede al server una pagina HTML che verrà poi visualizzataHTML che verrà poi visualizzata

• La pagina HTML può contenere codice La pagina HTML può contenere codice (Javascript) che, eseguito dal browser, (Javascript) che, eseguito dal browser, introduce elementi di dinamicitàintroduce elementi di dinamicità

Client Server

HTTP Server

<HTML><script

lang=JS></script>

JS

RichiestaGET <url>

RispostaPOST

HTMLDocs

Page 7: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Dinamicità e Web: ServerDinamicità e Web: Server

• Dinamicità “lato server”Dinamicità “lato server”– Contenuti dinamiciContenuti dinamici

• informazioni prelevate da diverse sorgenti informazioni prelevate da diverse sorgenti (file, DB, Internet, ...).(file, DB, Internet, ...).

•processamento testo/immagini.processamento testo/immagini.

•gestione profili, sessioni.gestione profili, sessioni.

•......

– Tecnologie:Tecnologie:•Common Gateway Interface (CGI).Common Gateway Interface (CGI).

•Scriptlet (PHP, Perl, ASP, JSP, …).Scriptlet (PHP, Perl, ASP, JSP, …).

Page 8: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Dinamicità lato Server: CGIDinamicità lato Server: CGI

• Il client richiede al server di eseguire Il client richiede al server di eseguire uno programma (CGI)uno programma (CGI)

• L'esecuzione del CGI ha come risultato L'esecuzione del CGI ha come risultato una pagina HTMLuna pagina HTML

• Il server invia la pagina ottenuta al Il server invia la pagina ottenuta al browser per la visualizzazione.browser per la visualizzazione.

Client Server

HTTP Server

<HTML><script

lang=JS></script>

JS

RichiestaGET

<script-url>

RispostaPOST

HTMLDocs

CGI

DB

Page 9: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Client

Dinamicità lato Server: Dinamicità lato Server: scriptletscriptlet

• Il client richiede al server di processare Il client richiede al server di processare una scriptlet (HTML+codice eseguibile)una scriptlet (HTML+codice eseguibile)

• Il server esegue il codice ignorando i tags Il server esegue il codice ignorando i tags HTML che vengono restituti in outputHTML che vengono restituti in output

• L'HTML risultato conterrà parti dinamiche L'HTML risultato conterrà parti dinamiche effetto dell'esecuzione del codice.effetto dell'esecuzione del codice.

Server

HTTP Server

<HTML><script

lang=JS></script>

JS

RichiestaGET

<scriptlet-url>

RispostaPOST

HTMLDocs

PHP

DB

<HTML><?php… ?>

Page 10: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

CGI e PHP: qualche differenzaCGI e PHP: qualche differenza

Il PHP si sta affermando come linguaggio principe di Il PHP si sta affermando come linguaggio principe di scripting per la generazione di pagine dinamiche (ASP scripting per la generazione di pagine dinamiche (ASP è proprietario), sostituendo pian piano CGI: è proprietario), sostituendo pian piano CGI:

• in primo luogo perchè è multipiattaforma, ossia è in primo luogo perchè è multipiattaforma, ossia è possibile trovare il motore PHP per le più diffuse possibile trovare il motore PHP per le più diffuse piattaformepiattaforme

• PHP è un linguaggio embeeded nel codice HTML delle PHP è un linguaggio embeeded nel codice HTML delle pagine, e non necessita quindi di ulteriori file esterni pagine, e non necessita quindi di ulteriori file esterni per essere eseguitoper essere eseguito

• uno script PHP, di fatto, non ha bisogno di installazione uno script PHP, di fatto, non ha bisogno di installazione come avviene per uno script CGIcome avviene per uno script CGI

• con il PHP non si ha più bisogno di particolari con il PHP non si ha più bisogno di particolari configurazioni del webserver in modo da abilitare configurazioni del webserver in modo da abilitare directory cgi-bin oppure abilitare l'esecuzione di directory cgi-bin oppure abilitare l'esecuzione di determinati file con determinate estensionideterminati file con determinate estensioni

• le potenzialità del PHP (dalla versione 4) sono le potenzialità del PHP (dalla versione 4) sono praticamente identiche a quelle dei CGI in Perlpraticamente identiche a quelle dei CGI in Perl

Page 11: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Perché scegliere PHP? Perché scegliere PHP? Che cosa c'è dietro questo grande successo?Che cosa c'è dietro questo grande successo?• E' un prodotto Open Source e gratuito, quindi a disposizione di E' un prodotto Open Source e gratuito, quindi a disposizione di

tutti. Il vantaggio garantito dall'Open Source non è limitato al tutti. Il vantaggio garantito dall'Open Source non è limitato al non dover sborsare denaro ma essi generano delle vaste non dover sborsare denaro ma essi generano delle vaste comunità di utenticomunità di utenti

• La portabilità è un altro fattore determinanteLa portabilità è un altro fattore determinante• Le prestazioni PHP non rimane certo indietro: il motore Zend2, Le prestazioni PHP non rimane certo indietro: il motore Zend2,

introdotto con PHP 4, ha fornito un formidabile aumento della introdotto con PHP 4, ha fornito un formidabile aumento della velocità di esecuzione, portando PHP sugli stessi livelli di ASP, velocità di esecuzione, portando PHP sugli stessi livelli di ASP, ed in alcuni casi anche oltreed in alcuni casi anche oltre

• PHP è facile da imparare: la sua sintassi deriva dal CPHP è facile da imparare: la sua sintassi deriva dal C• Nonostante la sua semplicità, PHP è però un linguaggio dalle Nonostante la sua semplicità, PHP è però un linguaggio dalle

potenzialità vastissime: le sue funzioni infatti partono dalle più potenzialità vastissime: le sue funzioni infatti partono dalle più tradizionali operazioni di programmazione e ci permettono di tradizionali operazioni di programmazione e ci permettono di realizzare le più svariate funzioni legate al mondo del web: realizzare le più svariate funzioni legate al mondo del web: elaborare i moduli html, gestire i cookies, manipolare elaborare i moduli html, gestire i cookies, manipolare documenti pdf, etc.documenti pdf, etc.

• La possibilità di connettersi ad una vasta gamma di databaseLa possibilità di connettersi ad una vasta gamma di database

Page 12: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

PHP e HTML PHP e HTML

PHP è un linguaggio di PHP è un linguaggio di programmazione, immerso nel codice programmazione, immerso nel codice HTML di pagine web, la cui funzione HTML di pagine web, la cui funzione fondamentale è quella di produrre fondamentale è quella di produrre codice HTML condizionato ai risultati di codice HTML condizionato ai risultati di un'elaborazione di informazioniun'elaborazione di informazioni

Realizziamo così il Web dinamicoRealizziamo così il Web dinamico

Page 13: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

TagsTags

• Per inserire codice PHP nelle pagine Per inserire codice PHP nelle pagine web si usano speciali tags:web si usano speciali tags:<?php ... ?> //il più usato<?php ... ?> //il più usato

<script language="php"> //classico tag Script...

</script>

<script language="php"> //classico tag Script...

</script>

N.B. a parte il primo tag gli altri devono essere abilitati nel file di configurazione di PHP: php.ini

<? ... ?> //tag brevi<? ... ?> //tag brevi

<% ... % > //stile ASP<% ... % > //stile ASP

Page 14: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tags PHP e HTMLTags PHP e HTML

• Questi tag delimitano il codice PHP, e il Questi tag delimitano il codice PHP, e il codice contenuto al loro interno non codice contenuto al loro interno non sarà inviato al browser, ma eseguito e sarà inviato al browser, ma eseguito e interpretato interpretato

• Da questo potremmo dedurre che tutto Da questo potremmo dedurre che tutto ciò che sta ciò che sta fuorifuori da questi tag non da questi tag non verrà toccato da PHP, che si limiterà a verrà toccato da PHP, che si limiterà a passarlo al browser così com'èpassarlo al browser così com'è

Page 15: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Un primo esempioUn primo esempio

• Per generare il codice da inviare al browser Per generare il codice da inviare al browser abbiamo due funzioni, che possiamo abbiamo due funzioni, che possiamo considerare equivalenti, che sono: considerare equivalenti, che sono: printprint() e () e echoecho() (con o senza parentesi, ogni riga () (con o senza parentesi, ogni riga PHP termina con punto e virgola)PHP termina con punto e virgola)<HTML>

<HEAD><TITLE>Pagina di prova in PHP</TITLE>

</HEAD><BODY>

<?phpprint("Buongiorno a tutti!<br>\n");echo("E' una bellissima giornata");?>

</BODY>

<HTML><HEAD>

<TITLE>Pagina di prova in PHP</TITLE></HEAD><BODY>

<?phpprint("Buongiorno a tutti!<br>\n");echo("E' una bellissima giornata");?>

</BODY>

CODICE HTML<HTML>

<HEAD><TITLE>Pagina di prova in

PHP</TITLE></HEAD><BODY>

Buongiorno a tutti!<br>E' una bellissima giornata

</BODY>

CODICE HTML<HTML>

<HEAD><TITLE>Pagina di prova in

PHP</TITLE></HEAD><BODY>

Buongiorno a tutti!<br>E' una bellissima giornata

</BODY>

print "Buongiorno a tutti!<br>\n";echo "E' una bellissima giornata"; print "Buongiorno a tutti!<br>\n";echo "E' una bellissima giornata";

Page 16: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Formattare il codice e la Formattare il codice e la paginapagina

Facciamo caso ad un dettaglio: nelle istruzioni in cui stampavamo Facciamo caso ad un dettaglio: nelle istruzioni in cui stampavamo ""Buongiorno a tuttiBuongiorno a tutti", abbiamo inserito, dopo il "", abbiamo inserito, dopo il "<br><br>", il simbolo "", il simbolo "\\nn". Questo simbolo ha una funzione abbastanza importante, anche ". Questo simbolo ha una funzione abbastanza importante, anche se non fondamentale, che serve più che altro per dare leggibilità al se non fondamentale, che serve più che altro per dare leggibilità al codice HTML che stiamo producendocodice HTML che stiamo producendo

<?phpprint("prima riga\n");print("seconda riga<br>");print("terza riga");

?>

<?phpprint("prima riga\n");print("seconda riga<br>");print("terza riga");

?>

CODICE HTMLprima rigaseconda riga<br>terza riga

CODICE HTMLprima rigaseconda riga<br>terza riga

OUTPUTprima riga seconda rigaterza riga

OUTPUTprima riga seconda rigaterza riga

Page 17: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

I CommentiI Commenti• Un commento serve per documentare e rendere più Un commento serve per documentare e rendere più

chiari gli script:chiari gli script:– descrivere il contenuto delle variabili utilizzatedescrivere il contenuto delle variabili utilizzate– chiarire il significato dei parametri da passare ad una chiarire il significato dei parametri da passare ad una

funzionefunzione– spiegare cosa si sta facendo in un certo punto del codice spiegare cosa si sta facendo in un certo punto del codice

(specialmente in caso di script molto lunghi o frammentati)(specialmente in caso di script molto lunghi o frammentati)

// Commento in stile C++ // Commento in stile C++

# Commento in stile Perl # Commento in stile Perl

/* Questo è un commento in stile C,che può occupare più righe ma deve essere chiuso con l'apposito simbolo */

/* Questo è un commento in stile C,che può occupare più righe ma deve essere chiuso con l'apposito simbolo */

Page 18: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le variabili Le variabili • Le variabili sono alcuni dei componenti fondamentali di Le variabili sono alcuni dei componenti fondamentali di

qualsiasi linguaggio di programmazione. qualsiasi linguaggio di programmazione. • Il nome di una variabile inizia sempre con dollaro ($)Il nome di una variabile inizia sempre con dollaro ($)• In PHP possiamo scegliere il nome delle variabili usando In PHP possiamo scegliere il nome delle variabili usando

lettere, numeri e l'lettere, numeri e l'underscoreunderscore (_). Il primo carattere del (_). Il primo carattere del nome deve essere però una lettera o un underscore (non nome deve essere però una lettera o un underscore (non un numero) ed è case sensitive un numero) ed è case sensitive

• PHP non richiede che le variabili vengano dichiarate prima PHP non richiede che le variabili vengano dichiarate prima del loro usodel loro uso

$a = 5; $a = 5;

$a = 9;$b = 4;$c = $a * $b;

$a = 9;$b = 4;$c = $a * $b;

• Qualche operazione più complicata con le variabili

Page 19: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Variabili dinamiche Variabili dinamiche • In qualche situazione può presentarsi la necessità In qualche situazione può presentarsi la necessità

di utilizzare delle variabili senza sapere a priori di utilizzare delle variabili senza sapere a priori come si chiamano. In questi casi, il nome di queste come si chiamano. In questi casi, il nome di queste variabili sarà contenuto in ulteriori variabili variabili sarà contenuto in ulteriori variabili

$pippo = 'gawrsh!';$pluto = 'bau!';$paperino = 'quack!';

$nome = 'pippo';print ($$nome.'<br>');$nome = 'pluto';print ($$nome.'<br>');$nome = 'paperino';print ($$nome.'<br>');

$pippo = 'gawrsh!';$pluto = 'bau!';$paperino = 'quack!';

$nome = 'pippo';print ($$nome.'<br>');$nome = 'pluto';print ($$nome.'<br>');$nome = 'paperino';print ($$nome.'<br>');

OUTPUTgawrsh!bau!quack!

OUTPUTgawrsh!bau!quack!

Nota: il punto serve a concatenare i valori che vengono stampati

CODICE HTMLgawrsh!<br>bau!<br>quack!<br> CODICE HTMLgawrsh!<br>bau!<br>quack!<br>

Page 20: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Variabili pre-assegnateVariabili pre-assegnate

Page 21: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Eliminare una variabileEliminare una variabile

• In alcune situazioni ci può capitare di In alcune situazioni ci può capitare di avere la necessità di eliminare una avere la necessità di eliminare una variabile: in questo caso PHP ci mette variabile: in questo caso PHP ci mette a disposizione l'istruzione a disposizione l'istruzione unsetunset(): ():

Dopo l'istruzione unset, sarà come se Dopo l'istruzione unset, sarà come se la variabile non fosse mai esistita. la variabile non fosse mai esistita.

unset($variabile);unset($variabile);

Page 22: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

I tipi di variabile I tipi di variabile

• I tipi in PHP si dividono in:I tipi in PHP si dividono in:– Tipi semplici: Tipi semplici:

•BooleaniBooleani

• InteriInteri

•Numeri in virgola mobileNumeri in virgola mobile

•StringheStringhe

– Tipi composti: Tipi composti: •ArrayArray

•OggettiOggetti

Page 23: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi semplici: booleaniTipi semplici: booleani

• Le variabili booleane sono le più Le variabili booleane sono le più semplici: il loro valore può essere semplici: il loro valore può essere TRUETRUE o o FALSEFALSE (vero o falso) (vero o falso)

$vero = TRUE;$falso = FALSE; $vero = TRUE;$falso = FALSE;

Page 24: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi semplici: interiTipi semplici: interi

• Un numero intero, positivo o negativo, il cui Un numero intero, positivo o negativo, il cui valore massimo (assoluto) può variare in base al valore massimo (assoluto) può variare in base al sistema operativo su cui gira PHP, ma che sistema operativo su cui gira PHP, ma che generalmente si può considerare di circa 2 generalmente si può considerare di circa 2 miliardi (2 elevato alla 31esima potenza).miliardi (2 elevato alla 31esima potenza).

• Hanno sempre il segnoHanno sempre il segno• Possono essere espressi sia in base 10, in ottale Possono essere espressi sia in base 10, in ottale

(0…) o in esadecimale (0x…) (0…) o in esadecimale (0x…)

$int1 = 129;$int2 = -715;$int3 = 5 * 8; //$int3 vale 40$int4 = $int1 + $int2 //$int4 vale -586

$int1 = 129;$int2 = -715;$int3 = 5 * 8; //$int3 vale 40$int4 = $int1 + $int2 //$int4 vale -586

Page 25: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi semplici: numeri in virgola Tipi semplici: numeri in virgola mobilemobile

• I numeri in virgola mobile corrispondono in I numeri in virgola mobile corrispondono in PHP al tipo di dato double PHP al tipo di dato double

• Le notazioni supportate sono: Le notazioni supportate sono: – Notazione in virgola mobileNotazione in virgola mobile– Notazione scientifica con esponenteNotazione scientifica con esponente

$vm1 = 4.153; // 4,153$vm2 = 3.2e5; // 3,2 * 10^5, cioè 320.000$vm3 = 4E-8; // 4 * 10^-8, cioè 4/100.000.000 = 0,00000004

$vm1 = 4.153; // 4,153$vm2 = 3.2e5; // 3,2 * 10^5, cioè 320.000$vm3 = 4E-8; // 4 * 10^-8, cioè 4/100.000.000 = 0,00000004

Page 26: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi semplici: stringheTipi semplici: stringhe

• Una stringa è un qualsiasi insieme di Una stringa è un qualsiasi insieme di caratteri, senza limitazione. Le caratteri, senza limitazione. Le stringhe possono essere espresse in stringhe possono essere espresse in tre modi: tre modi: – Delimitate da apici (singoli)Delimitate da apici (singoli)– Delimitate da virgolette (doppie) Delimitate da virgolette (doppie) – Con la sintassi heredoc Con la sintassi heredoc

Page 27: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Stringhe delimitate da apici Stringhe delimitate da apici

• Le stringhe delimitate da apici singoli Le stringhe delimitate da apici singoli sono la forma più semplice, consigliata sono la forma più semplice, consigliata quando all'interno della stringa non vi quando all'interno della stringa non vi sono variabili di cui vogliamo ricavare sono variabili di cui vogliamo ricavare il valore il valore

$frase = 'Anna disse: "Ciao a tutti!" ma nessuno rispose';print $frase; $frase = 'Anna disse: "Ciao a tutti!" ma nessuno rispose';print $frase;

OUTPUTAnna disse: "Ciao a tutti!" ma nessuno risposeOUTPUTAnna disse: "Ciao a tutti!" ma nessuno rispose

Page 28: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Stringhe delimitate da Stringhe delimitate da virgolette virgolette

• Le virgolette ci consentono di usare le Le virgolette ci consentono di usare le stringhe in una maniera più sofisticata, in stringhe in una maniera più sofisticata, in quanto, se all'interno della stringa delimitata quanto, se all'interno della stringa delimitata da virgolette PHP riconosce un nome di da virgolette PHP riconosce un nome di variabile, lo sostituisce con il valore della variabile, lo sostituisce con il valore della variabile stessa (la variabile viene risolta)variabile stessa (la variabile viene risolta)

$nome = 'Anna';print "$nome è simpatica... a pochi";print '$nome è simpatica... a pochi';

$nome = 'Anna';print "$nome è simpatica... a pochi";print '$nome è simpatica... a pochi';

OUTPUTAnna è simpatica... a pochi

$nome è simpatica... a pochi

OUTPUTAnna è simpatica... a pochi

$nome è simpatica... a pochi

Page 29: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Stringhe con sintassi heredoc Stringhe con sintassi heredoc • Questa sintassi ci consente di delimitare una stringa con i Questa sintassi ci consente di delimitare una stringa con i

caratteri <<< seguiti da un identificatore (in genere si usa 'EOD', caratteri <<< seguiti da un identificatore (in genere si usa 'EOD', ma è solo una convenzione). Tutto ciò che segue questo ma è solo una convenzione). Tutto ciò che segue questo delimitatore viene considerato parte della stringa, fino a quando delimitatore viene considerato parte della stringa, fino a quando non viene ripetuto l'identificatore seguito da un punto e virgola. non viene ripetuto l'identificatore seguito da un punto e virgola.

Attenzione: l'identificatore di chiusura deve occupare una riga a sé stante, deve iniziare a colonna 1 e non deve contenere nessun altro carattere (nemmeno spazi vuoti) dopo il punto e virgola

$frase = “ciao a tutti”;$stringa = <<<EOTIl mio saluto è "$frase"EOT;print $stringa;

$frase = “ciao a tutti”;$stringa = <<<EOTIl mio saluto è "$frase"EOT;print $stringa;

$nome = “Paolo”;$stringa = <<<EODIl mio nome è $nomeEOD;print $stringa;

$nome = “Paolo”;$stringa = <<<EODIl mio nome è $nomeEOD;print $stringa;

OUTPUTIl mio nome è Paolo OUTPUTIl mio nome è Paolo

OUTPUTIl mio saluto è "ciao a tutti" OUTPUTIl mio saluto è "ciao a tutti"

Page 30: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi composti: array (creazione) Tipi composti: array (creazione) 1/21/2

• Un array è una variabile complessa che contiene una Un array è una variabile complessa che contiene una serie di valori ciascuno dei quali caratterizzato da serie di valori ciascuno dei quali caratterizzato da una chiave (indice numerico o alfanumerico)una chiave (indice numerico o alfanumerico)

• E' possibile creare gli array in due modi, tramite la E' possibile creare gli array in due modi, tramite la funzione funzione arrayarray()()

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

$colori[] = 'bianco';$colori[] = 'nero';$colori[] = 'giallo';$colori[] = 'verde';$colori[] = 'rosso';

$colori[] = 'bianco';$colori[] = 'nero';$colori[] = 'giallo';$colori[] = 'verde';$colori[] = 'rosso';

$colori[0] = 'bianco';$colori[1] = 'nero';$colori[2] = 'giallo';$colori[3] = 'verde';$colori[4] = 'rosso';

$colori[0] = 'bianco';$colori[1] = 'nero';$colori[2] = 'giallo';$colori[3] = 'verde';$colori[4] = 'rosso';

• Oppure lo si può creare implicitamente, Oppure lo si può creare implicitamente, aggiungendovi elementiaggiungendovi elementi

Page 31: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi composti: array (creazione) Tipi composti: array (creazione) 2/22/2

Nel caso di un array con chiavi Nel caso di un array con chiavi associative:associative:

• Mediante la funzione Mediante la funzione arrayarray()()

•Oppure lo si può creare implicitamente, aggiungendovi elementi

$cibo = array('es' => "paella",'it' => "pasta",'jp' =>

"sushimi");

$cibo = array('es' => "paella",'it' => "pasta",'jp' =>

"sushimi");

$cibo['es'] = "paella";$cibo['it'] = "pasta";$cibo['jp'] = "sushimi";

$cibo['es'] = "paella";$cibo['it'] = "pasta";$cibo['jp'] = "sushimi";

Page 32: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• Attenzione:Attenzione: capita qualche volta di leggere che PHP capita qualche volta di leggere che PHP gestisce due tipi di array: numerici ed associativi. gestisce due tipi di array: numerici ed associativi. Per array associativi si intendono quelli che hanno Per array associativi si intendono quelli che hanno chiavi (o indici) in formato stringa, come nell'ultimo chiavi (o indici) in formato stringa, come nell'ultimo esempio che abbiamo visto. In realtà però questo esempio che abbiamo visto. In realtà però questo non è esattonon è esatto: infatti PHP gestisce : infatti PHP gestisce un unicoun unico tipo di tipo di array, le cui chiavi possono essere numeriche o array, le cui chiavi possono essere numeriche o associative. La differenza è sottile, ma significativa: associative. La differenza è sottile, ma significativa: infatti le chiavi numeriche ed associative possono infatti le chiavi numeriche ed associative possono coesistere coesistere nello stesso arraynello stesso array..

Tipi composti: array Tipi composti: array (attenzione)(attenzione)

$formazione[1] ='Buffon'; $formazione[2] ='Panucci';$formazione[3] ='Nesta'; $formazione[4] ='Cannavaro';$formazione[5] ='Coco'; $formazione[6] ='Ambrosini';$formazione[7] ='Tacchinardi'; $formazione[8] ='Perrotta';$formazione[9] ='Totti'; $formazione[10] ='Inzaghi';$formazione[11] ='Vieri';$formazione['ct'] = 'Trapattoni';

$formazione[1] ='Buffon'; $formazione[2] ='Panucci';$formazione[3] ='Nesta'; $formazione[4] ='Cannavaro';$formazione[5] ='Coco'; $formazione[6] ='Ambrosini';$formazione[7] ='Tacchinardi'; $formazione[8] ='Perrotta';$formazione[9] ='Totti'; $formazione[10] ='Inzaghi';$formazione[11] ='Vieri';$formazione['ct'] = 'Trapattoni';

Page 33: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi composti: array (accesso)Tipi composti: array (accesso)

print $colori[1]; //stampa 'nero'print $colori[4]; //stampa 'rosso' print $colori[1]; //stampa 'nero'print $colori[4]; //stampa 'rosso'

• A questo punto ciascuno dei nostri cinque A questo punto ciascuno dei nostri cinque colori è caratterizzato da un indice colori è caratterizzato da un indice numerico, che PHP assegna numerico, che PHP assegna automaticamente a partire da 0 automaticamente a partire da 0

print $cibo['es']; //stampa 'paella'print $cibo['jp']; //stampa 'sushimi' print $cibo['es']; //stampa 'paella'print $cibo['jp']; //stampa 'sushimi'

• Mentre per l'array associativo ciascuno dei Mentre per l'array associativo ciascuno dei piatti è caratterizzato da un indice piatti è caratterizzato da un indice alfanumericoalfanumerico

print $formazione[1]; //stampa 'Buffon'print $formazione['ct']; //stampa

'Trapattoni'

print $formazione[1]; //stampa 'Buffon'print $formazione['ct']; //stampa

'Trapattoni'

• Mentre per l'array mistoMentre per l'array misto

Page 34: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Tipi composti: array Tipi composti: array multidimensionalimultidimensionali

• Un array a più dimensioni è un array nel quale Un array a più dimensioni è un array nel quale uno o più elementi sono degli array a loro volta uno o più elementi sono degli array a loro volta (non per forza tutti con la stessa struttura).(non per forza tutti con la stessa struttura).

$persone = array( array('nome' => 'Mario', 'cognome' => 'Rossi', 'data_nascita' => '1973/06/15', 'residenza' => 'Roma'), array('nome' => 'Paolo', 'cognome' => 'Bianchi', 'data_nascita' => '1968/04/05', 'residenza' => 'Torino'), array('nome' => 'Luca', 'cognome' => 'Verdi', 'data_nascita' => '1964/11/26', 'residenza' => 'Napoli'));

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

$persone = array( array('nome' => 'Mario', 'cognome' => 'Rossi', 'data_nascita' => '1973/06/15', 'residenza' => 'Roma'), array('nome' => 'Paolo', 'cognome' => 'Bianchi', 'data_nascita' => '1968/04/05', 'residenza' => 'Torino'), array('nome' => 'Luca', 'cognome' => 'Verdi', 'data_nascita' => '1964/11/26', 'residenza' => 'Napoli'));

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

$persone = array( 1 => array('nome' => 'Mario Rossi', 'residenza' => 'Roma', 'ruolo' => 'impiegato'), 2 => array('nome' => 'Paolo Bianchi', 'data_nascita' => '1968/04/05', 'residenza' => 'Torino'), 'totale_elementi' => 2);

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

$persone = array( 1 => array('nome' => 'Mario Rossi', 'residenza' => 'Roma', 'ruolo' => 'impiegato'), 2 => array('nome' => 'Paolo Bianchi', 'data_nascita' => '1968/04/05', 'residenza' => 'Torino'), 'totale_elementi' => 2);

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

Page 35: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Contare gli elementi di un Contare gli elementi di un arrayarray

• Se vogliamo sapere di quanti elementi Se vogliamo sapere di quanti elementi è composto un array, possiamo è composto un array, possiamo utilizzare la funzione utilizzare la funzione countcount() ()

$numero_elementi = count($formazione); $numero_elementi = count($formazione);

• Nell'esempio visto prima, la variabile Nell'esempio visto prima, la variabile $numero_elementi$numero_elementi assumerà il valore assumerà il valore 12: infatti abbiamo 11 elementi con 12: infatti abbiamo 11 elementi con chiavi numeriche e 1 ('ct') con la chiavi numeriche e 1 ('ct') con la chiave associativa. chiave associativa.

Page 36: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Eliminazione su arrayEliminazione su array

• Le istruzioni riportate di seguito sono Le istruzioni riportate di seguito sono utilizzate per eliminare soltanto un suo utilizzate per eliminare soltanto un suo elemento o un intero array elemento o un intero array

• Con la prima di queste due istruzioni Con la prima di queste due istruzioni abbiamo eliminato l'elemento con chiave 2 abbiamo eliminato l'elemento con chiave 2 dall'array dall'array $colori$colori. Questo creerà un 'buco' . Questo creerà un 'buco' nell'array, che passerà così dall'elemento 1 nell'array, che passerà così dall'elemento 1 all'elemento 3. Con la seconda istruzione all'elemento 3. Con la seconda istruzione invece eliminiamo l'intero array invece eliminiamo l'intero array $formazione$formazione. .

unset($colori[2]); // elimina l'elemento 'giallo'unset($formazione); // elimina l'intero array $formazioneunset($colori[2]); // elimina l'elemento 'giallo'unset($formazione); // elimina l'intero array $formazione

Page 37: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Gli operatori aritmeticiGli operatori aritmetici

• Gli operatori sono un altro degli elementi di base di Gli operatori sono un altro degli elementi di base di qualsiasi linguaggio di programmazione, in quanto qualsiasi linguaggio di programmazione, in quanto ci consentono non solo di effettuare le tradizionali ci consentono non solo di effettuare le tradizionali operazioni aritmetiche, ma più in generale di operazioni aritmetiche, ma più in generale di manipolare il contenuto delle nostre variabili. manipolare il contenuto delle nostre variabili.

• Il più classico e conosciuto degli operatori è quello Il più classico e conosciuto degli operatori è quello di assegnazione: di assegnazione:

$nome = 'Giorgio';$nome = 'Giorgio'; $a = 5;$a = 5; $b = $a;$b = $a;

• Altri operatori molto facili da comprendere sono Altri operatori molto facili da comprendere sono quelli aritmetici: addizione, sottrazione, divisione, quelli aritmetici: addizione, sottrazione, divisione, moltiplicazione, modulo. moltiplicazione, modulo.

$a = 3 + 7; //addizione $b = 5 - 2; //sottrazione

$c = 9 * 6; //moltiplicazione$d = 8 / 2; //divisione$e = 7 % 4; //modulo

$a = 3 + 7; //addizione $b = 5 - 2; //sottrazione

$c = 9 * 6; //moltiplicazione$d = 8 / 2; //divisione$e = 7 % 4; //modulo

Page 38: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Gli operatori di incremento e Gli operatori di incremento e decremento decremento

• Operatori ancora più sintetici che si Operatori ancora più sintetici che si possono utilizzare per incrementare possono utilizzare per incrementare o decrementare i valori di una unità o decrementare i valori di una unità

//incrementa di 1: equivale ad $a = $a + 1, o $a += 1$a++;++$a;

//decrementa di 1: equivale ad $a = $a - 1, o $a -= 1$a--; --$a;

//incrementa di 1: equivale ad $a = $a + 1, o $a += 1$a++;++$a;

//decrementa di 1: equivale ad $a = $a - 1, o $a -= 1$a--; --$a;

Page 39: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• Uno degli operatori più utilizzati è quello che Uno degli operatori più utilizzati è quello che serve per concatenare le stringhe: il punto. serve per concatenare le stringhe: il punto.

Gli operatori per le stringheGli operatori per le stringhe

$nome = 'pippo';$stringa1 = 'ciao '.$nome; //$stringa1 vale 'ciao pippo'$nome = 'pippo';$stringa1 = 'ciao '.$nome; //$stringa1 vale 'ciao pippo'

$a = 'pippo';$x = 'ciao';$x .= $a; //La stringa $a viene concatenato a $x

$a = 'pippo';$x = 'ciao';$x .= $a; //La stringa $a viene concatenato a $x

Page 40: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Gli operatori di confronto Gli operatori di confronto • Gli operatori di confronto sono fondamentali perché Gli operatori di confronto sono fondamentali perché

ci permettono, effettuando dei confronti fra valori, ci permettono, effettuando dei confronti fra valori, di prendere delle decisioni, cioè di far svolgere al di prendere delle decisioni, cioè di far svolgere al nostro script determinate operazioni invece di altrenostro script determinate operazioni invece di altre

• Il risultato di questa operazione sarà, ogni volta, Il risultato di questa operazione sarà, ogni volta, vero (true) o falso (false)vero (true) o falso (false)

• Gli operatori sono:Gli operatori sono:• == : uguale • != : diverso • === : identico (cioè uguale e dello stesso tipo: ad esempio

per due variabili di tipo intero) • > : maggiore • >= : maggiore o uguale • < : minore • <= : minore o uguale

ESEMPI NUMERICI$a = 7; $b = 7.0; $c = 4; //assegnamo valori a tre variabili

$a == $b; //vero$a == $c; //falso$a === $b; //falso, perché $a è intero mentre $b è float$a > $c; //vero$c >= $a; //falso, $c è minore di $a$a < $b; //falso, hanno lo stesso valore$c <= $b; //vero

ESEMPI NUMERICI$a = 7; $b = 7.0; $c = 4; //assegnamo valori a tre variabili

$a == $b; //vero$a == $c; //falso$a === $b; //falso, perché $a è intero mentre $b è float$a > $c; //vero$c >= $a; //falso, $c è minore di $a$a < $b; //falso, hanno lo stesso valore$c <= $b; //vero

ESEMPI SU STRINGHE$a = 'Mario'; $b = 'Giorgio'; $c = 'Giovanni'; $d =

'antonio'; $e = '4 gatti';

$a < $b; //falso, la 'G' precede la 'M‘$b < $c; //vero, la 'r' ('Gior') precede la 'v' ('Giov')$d > $a; //vero, la 'a' minuscola è 'maggiore' delle

maiuscole$c > $e; //vero, ogni lettera è 'maggiore' di qualsiasi cifra

ESEMPI SU STRINGHE$a = 'Mario'; $b = 'Giorgio'; $c = 'Giovanni'; $d =

'antonio'; $e = '4 gatti';

$a < $b; //falso, la 'G' precede la 'M‘$b < $c; //vero, la 'r' ('Gior') precede la 'v' ('Giov')$d > $a; //vero, la 'a' minuscola è 'maggiore' delle

maiuscole$c > $e; //vero, ogni lettera è 'maggiore' di qualsiasi cifra

Page 41: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Gli operatori logici Gli operatori logici • Con gli operatori logici possiamo combinare più valori booleani, Con gli operatori logici possiamo combinare più valori booleani,

oppure negarne uno (nel caso di NOT). Questi valori sono: oppure negarne uno (nel caso di NOT). Questi valori sono: • oror: valuta se almeno uno dei due operatori è vero; si può indicare con : valuta se almeno uno dei due operatori è vero; si può indicare con

'Or' oppure '||' 'Or' oppure '||' • andand: valuta se entrambi gli operatori sono veri; si indica con 'And' o : valuta se entrambi gli operatori sono veri; si indica con 'And' o

'&&' '&&' • xorxor: viene chiamato anche 'or esclusivo', e valuta se : viene chiamato anche 'or esclusivo', e valuta se uno solouno solo dei dei

due operatori è vero: l'altro deve essere falso; si indica con 'Xor' due operatori è vero: l'altro deve essere falso; si indica con 'Xor' • notnot: vale come negazione e si usa con un solo operatore: in pratica è : vale come negazione e si usa con un solo operatore: in pratica è

vero quando l'operatore è falso, e viceversa; si indica con '!' vero quando l'operatore è falso, e viceversa; si indica con '!'

ESEMPI10 > 8 And 7 < 6; //falso, la prima è vera - la seconda è falsa10 > 8 Or 7 < 6; //vero9 > 5 And 5 == 5; //vero: entrambe le condizioni sono vere9 > 5 Xor 5 == 5; //falso: solo una delle due deve essere vera 4 < 3 || 7 > 9; //falso: nessuna delle due condizioni è vera6 == 6 && 1 > 4; //falso: solo la prima condizione è vera

ESEMPI10 > 8 And 7 < 6; //falso, la prima è vera - la seconda è falsa10 > 8 Or 7 < 6; //vero9 > 5 And 5 == 5; //vero: entrambe le condizioni sono vere9 > 5 Xor 5 == 5; //falso: solo una delle due deve essere vera 4 < 3 || 7 > 9; //falso: nessuna delle due condizioni è vera6 == 6 && 1 > 4; //falso: solo la prima condizione è vera

Page 42: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

EspressioniEspressioni

• PHP si può definire un linguaggio orientato alle PHP si può definire un linguaggio orientato alle espressioniespressioni

• Un’espressione è “qualsiasi cosa che abbia un Un’espressione è “qualsiasi cosa che abbia un valore”valore”

• Il procedimento che, a partire da una data Il procedimento che, a partire da una data espressione, restituisce il valore corrispondente espressione, restituisce il valore corrispondente viene definito viene definito valutazione dell'espressionevalutazione dell'espressione

• Sono espressioni: Sono espressioni: – tipi scalari (costanti booleane, numeri interi ed in virgola tipi scalari (costanti booleane, numeri interi ed in virgola

mobile, stringhe)mobile, stringhe)– tipi compositi (array ed oggetti)tipi compositi (array ed oggetti)– le variabilile variabili– le funzioni, con valore quello restituito dalla funzione stessale funzioni, con valore quello restituito dalla funzione stessa– combinazione di espressioni con operatori (booleani, di combinazione di espressioni con operatori (booleani, di

confronto, …)confronto, …)• Altre espressioni: l’assegnazione ($n=2) e Altre espressioni: l’assegnazione ($n=2) e

l’espressione condizionale (expr1 ? expr2 : expr3)l’espressione condizionale (expr1 ? expr2 : expr3)

Page 43: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Strutture di controllo: Strutture di controllo: condizioni (if-then-else) condizioni (if-then-else)

• Con le strutture di controllo andiamo ad analizzare un Con le strutture di controllo andiamo ad analizzare un altro degli aspetti fondamentali della altro degli aspetti fondamentali della programmazione: la possibilità cioè di eseguire programmazione: la possibilità cioè di eseguire operazioni diverse, ed eventualmente di eseguirle più operazioni diverse, ed eventualmente di eseguirle più voltevolte

• La principale di queste istruzioni è la La principale di queste istruzioni è la if-then-elseif-then-else

if ($nome == 'Luca')   print "ciao Luca!<br>";

if ($nome == 'Luca')   print "ciao Luca!<br>";

if ($nome == 'Luca') {  print "ciao Luca!<br>";  print "dove sono i tuoi amici?<br>";

}print "ciao a tutti voi";

if ($nome == 'Luca') {  print "ciao Luca!<br>";  print "dove sono i tuoi amici?<br>";

}print "ciao a tutti voi";

if ($nome == 'Luca') {  print "bentornato Luca!";

} else {

  print "ciao $nome!";}

if ($nome == 'Luca') {  print "bentornato Luca!";

} else {

  print "ciao $nome!";}

if ($nome == 'Luca') {  print "bentornato Luca!";

} elseif ($cognome == 'Verdi') {

  print "Buongiorno, signor Verdi";}else {

  print "ciao $nome!";}

if ($nome == 'Luca') {  print "bentornato Luca!";

} elseif ($cognome == 'Verdi') {

  print "Buongiorno, signor Verdi";}else {

  print "ciao $nome!";}

Page 44: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• Passiamo ora a verificare una seconda Passiamo ora a verificare una seconda istruzione che ci permette di prevedere istruzione che ci permette di prevedere diversi valori possibili per un'espressione: diversi valori possibili per un'espressione:

Strutture di controllo: Strutture di controllo: condizioni (switch-case) condizioni (switch-case)

switch ($nome) {  case 'Luca':    print "E' tornato Luca!";    break;  case 'Mario':    print "Ciao, Mario!";    break;  case 'Paolo':    print "Finalmente, Paolo!";    break;  default:    print "Benvenuto, chiunque tu sia";

}

switch ($nome) {  case 'Luca':    print "E' tornato Luca!";    break;  case 'Mario':    print "Ciao, Mario!";    break;  case 'Paolo':    print "Finalmente, Paolo!";    break;  default:    print "Benvenuto, chiunque tu sia";

}

Page 45: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Strutture di controllo: cicli Strutture di controllo: cicli (for)(for)

• I cicli sono un altro degli elementi fondamentali I cicli sono un altro degli elementi fondamentali di qualsiasi linguaggio di programmazione, in di qualsiasi linguaggio di programmazione, in quanto ci permettono di eseguire determinate quanto ci permettono di eseguire determinate operazioni in maniera ripetitiva.operazioni in maniera ripetitiva.

• Il costrutto Il costrutto forfor ci consente di eseguire il ciclo un ci consente di eseguire il ciclo un numero di volte prefissato, utilizzando un indicenumero di volte prefissato, utilizzando un indice

for ($mul = 1; $mul <= 10; $mul++){

  $ris = 5 * $mul;  print("5 * $mul = $ris<br>");

}

for ($mul = 1; $mul <= 10; $mul++){

  $ris = 5 * $mul;  print("5 * $mul = $ris<br>");

}

Page 46: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• Il costrutto Il costrutto while while si può considerare come una si può considerare come una specie di specie di ifif ripetuto più volte: infatti la sua ripetuto più volte: infatti la sua sintassi prevede che alla parola chiave sintassi prevede che alla parola chiave whilewhile segua, fra parentesi, la condizione da valutare, segua, fra parentesi, la condizione da valutare, e fra parentesi graffe, il codice da rieseguiree fra parentesi graffe, il codice da rieseguire

$mul = 1;while ($mul <= 10) {

$ris = 5 * $mul;print("5*$mul=$ris<br>");$mul++;

}

$mul = 1;while ($mul <= 10) {

$ris = 5 * $mul;print("5*$mul=$ris<br>");$mul++;

}

$mul = 11;do {

$ris = 5 * $mul;print("5*$mul=$ris<br>");$mul++;

} while ($mul <= 10)

$mul = 11;do {

$ris = 5 * $mul;print("5*$mul=$ris<br>");$mul++;

} while ($mul <= 10)

Strutture di controllo: cicli Strutture di controllo: cicli (while, do-while)(while, do-while)

Page 47: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

• Quest’ultimo particolare tipo di ciclo, é Quest’ultimo particolare tipo di ciclo, é pensato appositamente per il pensato appositamente per il trattamento degli array. Questo ci trattamento degli array. Questo ci permette di costruire un ciclo che viene permette di costruire un ciclo che viene ripetuto per ogni elemento dell'array che ripetuto per ogni elemento dell'array che gli passiamo. gli passiamo.

Strutture di controllo: cicli Strutture di controllo: cicli (foreach)(foreach)

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

}

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

}

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

}

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

}

Page 48: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Strutture di controllo: cicli Strutture di controllo: cicli Uscire da un cicloUscire da un ciclo

• Abbiamo a disposizione due strumenti per Abbiamo a disposizione due strumenti per modificare il comportamento del nostro modificare il comportamento del nostro script dall'interno del ciclo: script dall'interno del ciclo: – continuecontinue (non completa la presente (non completa la presente

iterazione e passare alla successiva)iterazione e passare alla successiva)– breakbreak (interrompe definitivamente (interrompe definitivamente

l'esecuzione del ciclo) l'esecuzione del ciclo)

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

}

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

}

Page 49: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

FunzioniFunzioni• La dichiarazione di funzioni avviene con la parola chiave La dichiarazione di funzioni avviene con la parola chiave

functionfunction e consente di estendere il linguaggio, aggiungendovi e consente di estendere il linguaggio, aggiungendovi nuovi comandinuovi comandi

• nome-funzionenome-funzione è il nome da assegnare alla funzione e con cui è il nome da assegnare alla funzione e con cui essa verrà invocataessa verrà invocata

• argomento,...argomento,... è un elenco, eventualmente vuoto, di argomenti (o è un elenco, eventualmente vuoto, di argomenti (o parametri) da fornire alla funzioneparametri) da fornire alla funzione

• blocco-istruzioniblocco-istruzioni rappresenta il corpo della funzione (qualunque rappresenta il corpo della funzione (qualunque codice PHP valido, persino altre funzioni e definizioni di classe)codice PHP valido, persino altre funzioni e definizioni di classe)

• Il risultato viene restituito con Il risultato viene restituito con return(valore)return(valore) che provoca l'uscita che provoca l'uscita dalla funzione (può essere restituito qualsiasi tipo, incluse liste e dalla funzione (può essere restituito qualsiasi tipo, incluse liste e oggetti)oggetti)

• L'esecuzione dello script riprende dal punto in cui essa era stata L'esecuzione dello script riprende dal punto in cui essa era stata invocatainvocata

function nome-funzione (argomento, ...) {blocco-istruzioni;

}

function nome-funzione (argomento, ...) {blocco-istruzioni;

}

Page 50: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Funzioni: cosa accade?Funzioni: cosa accade?• Quando viene chiamata una funzione:Quando viene chiamata una funzione:

– PHP cerca la funzione per nome (se non la trova genera un PHP cerca la funzione per nome (se non la trova genera un errore)errore)

– PHP sostituisce le variabili nell’elenco di parametri della PHP sostituisce le variabili nell’elenco di parametri della definizione con i valori degli argomenti (passaggio per definizione con i valori degli argomenti (passaggio per valore o per riferimento)valore o per riferimento)

– Vengono eseguite le istruzioni nel corpo della funzione, Vengono eseguite le istruzioni nel corpo della funzione, restituendo l’eventuale valore se viene eseguita l'istruzione restituendo l’eventuale valore se viene eseguita l'istruzione returnreturn

function maggiorenne($a) {if ($a >= 18) $res = TRUE;else $res = FALSE;return($res);

}

//La variabile $eta è già definitaif (maggiorenne($eta)) echo("Puoi accedere al sito<BR>");else echo("Non puoi accedere<BR>");

function maggiorenne($a) {if ($a >= 18) $res = TRUE;else $res = FALSE;return($res);

}

//La variabile $eta è già definitaif (maggiorenne($eta)) echo("Puoi accedere al sito<BR>");else echo("Non puoi accedere<BR>");

Page 51: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Argomenti di FunzioniArgomenti di Funzioni• PHP è tollerante rispetto al numero di parametri passati alla funzione (di PHP è tollerante rispetto al numero di parametri passati alla funzione (di

conseguenza non possono esistere due funzioni con lo stesso nome)conseguenza non possono esistere due funzioni con lo stesso nome)• Una funzione può definire valori (solo costanti) pre-definiti per gli argomenti Una funzione può definire valori (solo costanti) pre-definiti per gli argomenti

(gli argomenti pre-definiti devono sempre seguire tutti quelli non pre-definiti)(gli argomenti pre-definiti devono sempre seguire tutti quelli non pre-definiti)

• Di default, gli argomenti della funzione sono passati per valore (se cambiate il Di default, gli argomenti della funzione sono passati per valore (se cambiate il valore dell'argomento nel corpo della funzione, esso non cambierà al di fuori)valore dell'argomento nel corpo della funzione, esso non cambierà al di fuori)

• Per passare ad una funzione un argomento per riferimento, dovete anteporre Per passare ad una funzione un argomento per riferimento, dovete anteporre un un ampersandampersand (&) al nome dell'argomento nella definizione della funzione: (&) al nome dell'argomento nella definizione della funzione:

function anagrafe($nome, $cf='non disponibile') {  print "Nome: $nome<br>";   print "Codice fiscale: $cf<br>";

}

function anagrafe($nome, $cf='non disponibile') {  print "Nome: $nome<br>";   print "Codice fiscale: $cf<br>";

}

function aggiungi_qualcosa(&$string) {return $string .= 'e qualche altra cosa.';

}

$str = 'Questa stringa, ';echo aggiungi_qualcosa($str); // l'output sarà 'Questa stringa, e qualche altra cosa.'

function aggiungi_qualcosa(&$string) {return $string .= 'e qualche altra cosa.';

}

$str = 'Questa stringa, ';echo aggiungi_qualcosa($str); // l'output sarà 'Questa stringa, e qualche altra cosa.'

Page 52: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Funzioni variabiliFunzioni variabili

• PHP supporta il concetto di funzioni variabiliPHP supporta il concetto di funzioni variabili

• PHP cercherà una funzione con lo stesso nome PHP cercherà una funzione con lo stesso nome del valore della variabile e cercherà di eseguirladel valore della variabile e cercherà di eseguirla

function foo1() {echo "Eseguo foo1()<br>\n";}function foo2($arg1 = "null", $arg2 = "null") {echo "Eseguo foo2($arg1,$arg2)<br>\n";}$array_foo = array('a'=> 'foo1', 'd'=> 'foo2);foreach ($array_foo as $funzione) {

$funzione("hello", "world");}

function foo1() {echo "Eseguo foo1()<br>\n";}function foo2($arg1 = "null", $arg2 = "null") {echo "Eseguo foo2($arg1,$arg2)<br>\n";}$array_foo = array('a'=> 'foo1', 'd'=> 'foo2);foreach ($array_foo as $funzione) {

$funzione("hello", "world");}

Page 53: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Funzioni: variabili e visibilitàFunzioni: variabili e visibilità

• Le variabili all’interno di una funzione sono sempre Le variabili all’interno di una funzione sono sempre private, tranne quando sono definite con la parola private, tranne quando sono definite con la parola chiave chiave globalglobal

• Le funzioni non tengono memoria della loro Le funzioni non tengono memoria della loro esecuzione a meno dell’uso della parola chiave esecuzione a meno dell’uso della parola chiave staticstatic

• Una funzione definita in uno script è disponibile Una funzione definita in uno script è disponibile ovunque in essoovunque in esso

• Solitamente le funzioni sono definite in file separati Solitamente le funzioni sono definite in file separati (librerie) da includere all'occorrenza nel programma (librerie) da includere all'occorrenza nel programma – includeinclude((filenamefilename) (e ) (e requirerequire((filenamefilename)) include un file e lo )) include un file e lo

valuta valuta – I costrutti sono diversi solo per il fatto che I costrutti sono diversi solo per il fatto che includeinclude ritorna un ritorna un

warning in caso di fallimento, warning in caso di fallimento, requirerequire ritorna un fatal error ritorna un fatal error• Se l'inclusione si verifica dentro una funzione tutto il Se l'inclusione si verifica dentro una funzione tutto il

codice nel file chiamato seguirà lo scope della codice nel file chiamato seguirà lo scope della funzionefunzione

Page 54: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

OOP: definizioni generaliOOP: definizioni generali

• I concetti base della OOP: I concetti base della OOP: classeclasse ed ed oggettooggetto (o istanza): una (o istanza): una classe è l’astrazione di un oggetto, mentre un oggetto è classe è l’astrazione di un oggetto, mentre un oggetto è istanza di una classeistanza di una classe

• La classe definisce un nuovo tipo di dato, caratterizzato da:La classe definisce un nuovo tipo di dato, caratterizzato da:– Un insieme di variabili, detti attributi (proprietà) Un insieme di variabili, detti attributi (proprietà) – Un insieme di funzioni che operano su di essi, detti metodiUn insieme di funzioni che operano su di essi, detti metodi

• Caratteristiche della OOP:Caratteristiche della OOP:– Incapsulamento dati – i dati interni di una classe sono trasparenti Incapsulamento dati – i dati interni di una classe sono trasparenti

al programmatore, che opererà su di essi solo tramite i metodial programmatore, che opererà su di essi solo tramite i metodi– Protezione dati e metodi – l'accesso a dati e metodi “privati” di Protezione dati e metodi – l'accesso a dati e metodi “privati” di

una classe è disciplinato secondo diverse politiche (vari livelli di una classe è disciplinato secondo diverse politiche (vari livelli di protezione)protezione)

– Interfaccia – i metodi rappresentano, nella semantica e non nella Interfaccia – i metodi rappresentano, nella semantica e non nella implementazione, l’interfaccia per usare la classeimplementazione, l’interfaccia per usare la classe

– Modularizzazione – il programma viene decomposto in moduli, Modularizzazione – il programma viene decomposto in moduli, che possono essere stati sviluppati da altri utenti (Riuso del che possono essere stati sviluppati da altri utenti (Riuso del codice)codice)

– Ereditarietà – le classi ereditano metodi e attributi da altre classi Ereditarietà – le classi ereditano metodi e attributi da altre classi (Riuso del codice)(Riuso del codice)

Page 55: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

OOP: proprietà e metodiOOP: proprietà e metodi

• In PHP la dichiarazione di una classe avviene In PHP la dichiarazione di una classe avviene tramite la parola chiave tramite la parola chiave classclass, seguita dal nome , seguita dal nome della classe e dal corpodella classe e dal corpo

• Il corpo della classe ne fornisce l’implementazione Il corpo della classe ne fornisce l’implementazione ed è costituito da dichiarazioni di proprietà e ed è costituito da dichiarazioni di proprietà e metodimetodi

• Una proprietà è una variabile dichiarata all'interno Una proprietà è una variabile dichiarata all'interno della classe; la dichiarazione deve essere esplicita, della classe; la dichiarazione deve essere esplicita, attraverso la parola chiave attraverso la parola chiave varvar

• La dichiarazione di un metodo è del tutto analoga a La dichiarazione di un metodo è del tutto analoga a quella di una funzionequella di una funzione

• Accesso ad una proprietà o metodo nella classeAccesso ad una proprietà o metodo nella classe

• e fuori dalla classee fuori dalla classe$oggetto->variabile;$oggetto->metodo(...);$oggetto->variabile;$oggetto->metodo(...);

$this->variabile;$this->metodo(...);$this->variabile;$this->metodo(...);

ESEMPIO CLASSE CARRELLOclass Carrello {

var $items; // Articoli nel carrello// Aggiunge $num articoli di $artnr nel carrellofunction add_item ($artnr, $num) {

$this->items[$artnr] += $num;}//Rimuove $num articoli di $artnr dal carrellofunction remove_item ($artnr, $num) {

if ($this->items[$artnr] > $num) {$this->items[$artnr] -= $num;return TRUE;

} else {return FALSE;

} }

}

ESEMPIO CLASSE CARRELLOclass Carrello {

var $items; // Articoli nel carrello// Aggiunge $num articoli di $artnr nel carrellofunction add_item ($artnr, $num) {

$this->items[$artnr] += $num;}//Rimuove $num articoli di $artnr dal carrellofunction remove_item ($artnr, $num) {

if ($this->items[$artnr] > $num) {$this->items[$artnr] -= $num;return TRUE;

} else {return FALSE;

} }

}

Page 56: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

OOP: costruttoreOOP: costruttore

• La parola chiave La parola chiave newnew ci consente di istanziare una ci consente di istanziare una classe, cioè creare un oggetto istanza di una classeclasse, cioè creare un oggetto istanza di una classe

• Il costruttore di classe è il metodo, con lo stesso Il costruttore di classe è il metodo, con lo stesso nome della classe, che è richiamato nome della classe, che è richiamato automaticamente alla creazione di un'istanza della automaticamente alla creazione di un'istanza della classeclasse

• Se all'interno di una classe base non è presente un Se all'interno di una classe base non è presente un costruttore, in automatico viene invocato quello costruttore, in automatico viene invocato quello della classe padredella classe padre

• Esiste in PHP 5 un nome standardizzato per i Esiste in PHP 5 un nome standardizzato per i costruttori, costruttori, _construct_construct(), così se la classe dovesse (), così se la classe dovesse essere rinominata non sarà necessario modificare essere rinominata non sarà necessario modificare anche il nome del suo costruttoreanche il nome del suo costruttore

Page 57: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

OOP: distruttoreOOP: distruttore

• In PHP5 è stato introdotto il distruttore In PHP5 è stato introdotto il distruttore _destruct_destruct(): la funzione che viene (): la funzione che viene richiamata automaticamente quando la richiamata automaticamente quando la classe viene distruttaclasse viene distrutta

• Non è possibile richiamare un distruttore Non è possibile richiamare un distruttore di una classe padredi una classe padre

• I distruttori sono utili per "operazioni di I distruttori sono utili per "operazioni di pulizia", come ad esempio eliminare file pulizia", come ad esempio eliminare file temporanei e chiudere le connessioni a temporanei e chiudere le connessioni a database database

Page 58: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

OOP: ereditarietàOOP: ereditarietà

• È possibile generare classi per estensione di È possibile generare classi per estensione di altre classialtre classi

• Una classe estesa o derivata ha tutte le Una classe estesa o derivata ha tutte le variabili e le funzioni della classe di base variabili e le funzioni della classe di base (ereditarietà) più tutto ciò che viene aggiunto (ereditarietà) più tutto ciò che viene aggiunto dall'estensionedall'estensione

• Una classe estesa dipende sempre da una Una classe estesa dipende sempre da una singola classe di base (no ereditarità multipla)singola classe di base (no ereditarità multipla)

• Le classi si estendono usando la parola chiave Le classi si estendono usando la parola chiave extendsextends

class Carr_con_nome extends Carrelloclass Carr_con_nome extends Carrello

Page 59: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Eccezioni: throw-try-catchEccezioni: throw-try-catch

• Con l'avvento del PHP5 è possibile gestire Con l'avvento del PHP5 è possibile gestire le eccezioni ovvero è possibile gestire le le eccezioni ovvero è possibile gestire le situazioni di errore in modo più evolutosituazioni di errore in modo più evoluto

• Le eccezioni vengono definite dalla terna:Le eccezioni vengono definite dalla terna:– throwthrow: genera l'eccezione (nuova istanza nella : genera l'eccezione (nuova istanza nella

classe eccezione o una estesa)classe eccezione o una estesa)– trytry: esegue un blocco di istruzioni con abilitato : esegue un blocco di istruzioni con abilitato

il meccanismo di cattura delle eccezioniil meccanismo di cattura delle eccezioni– catchcatch: specifica il blocco di istruzioni da : specifica il blocco di istruzioni da

eseguire in caso di eccezione (gestore eseguire in caso di eccezione (gestore dell'eccezione)dell'eccezione)

Page 60: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Eccezioni: esempioEccezioni: esempio

function a() { echo "dentro a()\n"; echo " Emetto l'exception \n"; throw new Exception ("hei"); echo "esco da a();\n";

}

try { a(); echo "Dopo a()\n";

} catch (Exception $e) {echo " Eccezione:".$e->getMessage();echo "\n";

} echo "finito";

function a() { echo "dentro a()\n"; echo " Emetto l'exception \n"; throw new Exception ("hei"); echo "esco da a();\n";

}

try { a(); echo "Dopo a()\n";

} catch (Exception $e) {echo " Eccezione:".$e->getMessage();echo "\n";

} echo "finito";

OUTPUTdentro a()Emetto l'exceptionEccezione:hei finito

OUTPUTdentro a()Emetto l'exceptionEccezione:hei finito

Page 61: Introduzione a PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

PHP5: RiferimentiPHP5: Riferimenti

• www.php.netwww.php.net

• www.apache.orgwww.apache.org

• freephp.html.itfreephp.html.it

• pear.php.netpear.php.net

• pecl.php.netpecl.php.net