Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P

25
1 A.A. 2005/2006 Basi di Dati e web 1 Corso di Basi di Dati e Laboratorio PHP5 Introduzione al linguaggio Alfio Ferrara - Stefano Montanelli A.A. 2005/2006 Basi di Dati e web 2 Introduzione – 1 PHP: Hypertext Preprocessor PHP è un linguaggio di scripting Open Source Creato nel 1995 da Rasmus Lerdorf – PHP/FI. Consisteva in un insieme di script PERL per l’accesso a risorse online A.A. 2005/2006 Basi di Dati e web 3 Introduzione – 2 Sintassi semplice (C-like) Codice PHP embedded in pagine HTML Grande disponibilità di librerie Modello di programmazione OO

Transcript of Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P

Page 1: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

1

A.A. 2005/2006 Basi di Dati e web 1

Corso di Basi di Dati e Laboratorio

PHP5Introduzione al linguaggio

Alfio Ferrara - Stefano Montanelli

A.A. 2005/2006 Basi di Dati e web 2

Introduzione – 1

• PHP: Hypertext Preprocessor• PHP è un linguaggio di scripting Open

Source• Creato nel 1995 da Rasmus Lerdorf

– PHP/FI. Consisteva in un insieme di script PERL per l’accesso a risorse online

A.A. 2005/2006 Basi di Dati e web 3

Introduzione – 2

• Sintassi semplice (C-like)• Codice PHP embedded in pagine HTML• Grande disponibilità di librerie• Modello di programmazione OO

Page 2: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

2

A.A. 2005/2006 Basi di Dati e web 4

Introduzione – 3

• Sistemi operativi compatibili– Linux– Varianti Unix (HP-UX, Solaris)– *BSD– Microsoft Windows – Mac OS X– RISC OS

A.A. 2005/2006 Basi di Dati e web 5

Introduzione – 4

• Web server compatibili (come modulo o CGI)– Apache– Microsoft Internet Information Services (IIS)– Personal Web Server– Sun, Netscape e iPlanet servers– Sambar server– Xitami– OmniHTTPd

A.A. 2005/2006 Basi di Dati e web 6

Introduzione – 5

• Ambito di utilizzo– Con web server come modulo– Con web server come CGI– Come linguaggio di scripting stand-alone per

generare interfacce grafiche (php-gtk)

Page 3: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

3

A.A. 2005/2006 Basi di Dati e web 7

Introduzione – 6

• Supporto a numerosi DBMS– Adabas D– Ingres– Oracle – dBase– InterBase– Ovrimos– Empress– FrontBase– PostgreSQL– FilePro (read-only)– mSQL

– Solid– Hyperwave– Direct MS-SQL– Sybase– IBM DB2– MySQL– Velocis– Informix– ODBC– Unix dbm

A.A. 2005/2006 Basi di Dati e web 8

Installazione – 1

• E’ possibile installare PHP mediante la compilazione dei sorgenti

• Esempio di compilazione per Linux– ./configure--with-apxs2--with-apxs

• alcuni parametri di configurazione--with-pgsql (supporto PostgreSQL)--with-dom (supporto al processamento DOM dell’xml)--with-xslt (supporto a XSLT)--with-gd (supporto alle librerie grafiche GD)

– make– make install

• Lanciato come utente superuser

A.A. 2005/2006 Basi di Dati e web 9

Installazione – 2

• E’ possibile installare PHP mediante una versione precompilata

• Esempio di installazione per Windows– Scaricare la versione binaria priva di installer

Creare la cartella di installazione di PHP (e.g., c:\php), di seguito chiamata PHPinstallDIR.

– Leggere il file install.txt e seguire la procedura di installazione manuale come modulo per Apache2

– Copiare il file php.ini-recommended in PHPinstallDIR, rinominarlo in php.ini

Page 4: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

4

A.A. 2005/2006 Basi di Dati e web 10

Installazione – 3

– Copiare le seguenti librerie in PHPinstallDIR:• fdftk.dll• libmysql.dll (per il supporto a MySQL)• php5apache2.dll• php5ts.dll

– Copiare il contenuto della cartella ext in PHPinstallDIR\extensions

– Aggiungere PHPinstallDIR alla variabile di sistema path

A.A. 2005/2006 Basi di Dati e web 11

Configurazione – 1

• Configurazione di Apache per il supporto al PHP– Modificare il file httpd.conf

• LoadModule php5_module "PHPinstallDIR/php5apache2.dll"

• AddType application/x-httpd-php .php• PHPIniDir "PHPinstallDIR"

A.A. 2005/2006 Basi di Dati e web 12

Configurazione – 2

• Configurazione PHP (php.ini)– Permette di configurare a runtime il comportamento dell’interprete– Modificare le direttive

• include_path = "PHPinstallDIR\includes“

Elenco di directory in cui verranno ricercati i file richiamati da eventuali include() e require()

• extension_dir = "PHPinstallDIR\extensions“

Elenco di directory in cui verranno ricercate le librerie estese di PHP– Abilitare le seguenti estensioni

• extension=php_mysql.dll• extension=php_pgsql.dll• extension=php_xsl.dll

• Alcune direttive di configurazione possono essere impostate in httpd.conf

Page 5: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

5

A.A. 2005/2006 Basi di Dati e web 13

Configurazione – 3

• E’ possibile verificare la configurazione di PHP mediante la funzione phpinfo– <?php phpinfo() ?>

• Alcune direttive possono essere modificate localmente ad uno script con la funzione ini_set()– ini_set("max_execution_time", "60");

• Ogni direttiva è associata ad un livello di permesso che identifica in quale contesto la direttiva può essere modificata– PHP_INI_SYSTEM - php.ini o httpd.conf– PHP_INI_PERDIR - php.ini, .htaccess o httpd.conf– PHP_INI_USER - script utente o registro di sistema– PHP_INI_ALL

A.A. 2005/2006 Basi di Dati e web 14

Configurazione – 4• Alcune direttive di configurazione

– max_execution_time. Tempo massimo di esecuzione dello script

• Default = 30 (secondi)• Livello di modifica = PHP_INI_ALL

– upload_max_filesize. Definisce la dimensione massima di dati in upload

• Default = 2M• Livello di modifica = PHP_INI_PERDIR

– post_max_size. Definisce la dimensione massima di dati inviabili in POST (deve essere maggiore di upload_max_filesize)

• Default = 8M• Livello di modifica = PHP_INI_PERDIR

A.A. 2005/2006 Basi di Dati e web 15

Configurazione – 5– upload_tmp_dir. Directory in cui vengono

temporaneamente salvati i file in upload• Default = NULL• Livello di modifica = PHP_INI_SYSTEM

– display_errors. Definisce se gli errori devono essere riportati come parte dell’output

• Default = Off• Livello di modifica = PHP_INI_ALL

– magic_quotes_gpc. Nei dati provenienti da GET, POST e Cookie, quota automaticamente con un ‘\’ i seguenti caratteri: ‘ “ \

• Default = Off• Livello di modifica = PHP_INI_PERDIR

Page 6: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

6

A.A. 2005/2006 Basi di Dati e web 16

PHP4 vs PHP5

• Rispetto alle precedenti versioni, PHP5 introduce importanti novità sia per numero che per rilevanza:– Zend Engine 2 – motore del linguaggio –

migliorato rispetto a performance e affidabilità– Modello ad oggetti rinnovato– Librerie di funzioni ristrutturate ed ampliate

(e.g., database, XML)– Retro-compatibilità ampiamente garantita

• Direttiva zend.ze1_compatibility_mode in php.ini per il supporto a PHP4

A.A. 2005/2006 Basi di Dati e web 17

Caratteri speciali

• Separatori. Identificano il codice PHP all’interno di un file– <?php /* codice */ ?>

• Commenti– ‘//’ e ‘#’ fino a fine riga o blocco– /* commenti

/* Non si possono nidificare */multi riga */

• Terminatore di riga ;– Esempio: echo “ciao”;

A.A. 2005/2006 Basi di Dati e web 18

Variabili – 1

• Le variabili sono indicate con il prefisso $– Es. $stringa = “questa è una stringa”

• I nomi delle variabili sono case sensitive• Un nome di variabile deve iniziare con una

lettera o con il simbolo _ (underscore) seguiti da una serie qualsiasi di lettere, numeri o underscore– $[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

primo carattere ulteriori caratteri

Page 7: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

7

A.A. 2005/2006 Basi di Dati e web 19

Variabili – 2

• PHP è un linguaggio loose typed, quindi le variabili non vengono definite dal programmatore, ma il loro tipo è deciso a runtime dall’interprete in base al contesto– Es. $number = 25;

– Es. $number = “questa è una stringa”;

A.A. 2005/2006 Basi di Dati e web 20

Variabili – 3

• Per sapere di che tipo è una variabile– gettype($nomevar) restituisce il tipo di $nomevar

– is_typename($nomevar) è una famiglia di funzioni utilizzate per il controllo di tipo

• Es. is_int($nomevar)

• Es. is_string($nomevar)

• Es. is_null($nomevar)

A.A. 2005/2006 Basi di Dati e web 21

Tipi di dati

• Tipi di dati supportati– Scalari

• Boolean• Integer• Float• String

– Tipi complessi• Array• Object

– Tipi speciali• Resource• Null

Page 8: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

8

A.A. 2005/2006 Basi di Dati e web 22

Tipo di dati Boolean

• Può assumere solo 2 valori– $var = true; //true e false sono case insensitive– $var = false;

• I seguenti tipi vengono valutati false se convertiti in boolean– integer 0 e float 0.0– string “” e string “0”– array vuoto (zero elementi)– Il tipo speciale NULL

• Tutti gli altri oggetti vengono valutati true

A.A. 2005/2006 Basi di Dati e web 23

Tipo di dati Integer

• Può assumere qualsiasi valore intero sia positivo sia negativo

• Possono essere specificati in base decimale, ottale o esadecimale– Es. $int = 35;

$int = -35;

$int = 043; //ottale$int = 0x23; //esadecimale

• Il valore boolean True viene valutato 1 se convertito in Integer

A.A. 2005/2006 Basi di Dati e web 24

Tipo di dati Float

• Conosciuti anche come double o real– Es. $float = 1.3245;

$float = 1.3e2;$float = 7E-10;

Page 9: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

9

A.A. 2005/2006 Basi di Dati e web 25

Tipo di dati String – 1

• Una stringa è una sequenza arbitraria di caratteri ASCII. Può essere specificata in diversi modi:

$string = ‘esempio di stringa’;$string = “stringa di $nome \n”;

/* caratteri di controllo e sostituzione divariabili */

$string = <<<KEYWORDSintassi Here document.Tutto ciò che compare prima della parolachiave (keyword in questo caso) è assegnatocome stringa alla variabile $stringKEYWORD

A.A. 2005/2006 Basi di Dati e web 26

Tipo di dati String – 2

• Sostituzione delle variabili nelle stringhe con apici doppi “ ”– Es. $var = ‘Paolo ’;– Es. echo “Lo studente $var è promosso”;

• Lo studente Paolo è promosso– Es. echo “Lo studente $varRossi è promosso”;

• Lo studente è promosso– Es. echo “Lo studente ${var}Rossi”;

• Lo studente Paolo Rossi è promosso

A.A. 2005/2006 Basi di Dati e web 27

Tipo di dati String – 3

• Conversione in stringa– (string) $nomevar– strval($nomevar)

– Il casting viene automaticamente effettuato in funzioni come echo() e print() o quando si confronta il valore di una variabile con una stringa

• True convertito nella stringa “1”• False convertito nella stringa vuota “”

– Integer e float sono convertiti in stringhe che rappresentano il loro valore

• Es. 1.2 convertito nella stringa “1.2”

Page 10: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

10

A.A. 2005/2006 Basi di Dati e web 28

Tipo di dati String – 4

– Il cast di un array in stringa restituisce sempre la stringa “Array”

• Quindi print($array) non mostra il contenuto di $array

– Gli oggetti sono sempre convertiti nella stringa “Object”

– I tipi Resource sono sempre convertiti in una stringa del tipo “Resource id #N” dove N è un numero assegnato dal PHP a runtime.

– NULL viene sempre convertito in stringa vuota

A.A. 2005/2006 Basi di Dati e web 29

Tipo di dati String – 5

– Per sapere il contenuto di variabili i cui tipi non possono essere convertiti in stringa (come array o oggetti) si possono usareprint_r($array);

var_dump($object);

A.A. 2005/2006 Basi di Dati e web 30

• Conversioni di stringhe in numeri– una stringa viene convertita in float se contiene il carattere ‘e’ o ‘E’

nella parte numerica. Il valore viene dato dalla parte iniziale della stringa

$var = 1+"10.5";$var = 1+"-1.3e3";$var = 1+"bob-1.3e3";$var = 1+"bob3";$var = 1+"10 words";$var = 4+"10.2 words";$var = "10.0 pigs " + 1;$var = "10.0 pigs " + 1.0;

Tipo di dati String – 6

//$var is float (11.5)//$var is float (-1299)//$var is integer (1)

//$var is integer (11)//$var is integer (1)

//$var is float (11)//$var is float (14.2)

//$var is float (11)

Page 11: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

11

A.A. 2005/2006 Basi di Dati e web 31

Tipo di dati Array – 1

• Un array in PHP è una mappa ordinata di chiavi e valori

• Può avere come valore un qualsiasi altro dato PHP, quindi anche un altro array

• Si accede ai suoi elementi tramite funzioni o con l’operatore [ ]

A.A. 2005/2006 Basi di Dati e web 32

Tipo di dati Array – 2

• Creare un array– Con la funzione array

• $ar= array(‘nome’=>‘Paolo’, ‘cognome’=>‘Rossi’);

– La chiave dell’array può essere una stringa o un intero. Un array può avere chiavi di tipo diverso.• $ar= array(‘nome’=>‘Ugo’, 23=>‘sole’);

A.A. 2005/2006 Basi di Dati e web 33

Tipo di dati Array – 3

– Se non si specifica la chiave di un valore verràautomaticamente scelto il valore massimo delle chiavi numeriche aumentato di 1• $ar= array(13=>‘uno’, 16=>‘due’, ‘tre’,

‘autore’=>‘io’);

Darà come risultato un array del tipo$ar= array(13=>‘uno’, 16=>‘due’, 17=>‘tre’,

‘autore’=>‘io’);

– Usare True o False come chiave equivale ad usare 0 o 1

Page 12: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

12

A.A. 2005/2006 Basi di Dati e web 34

Tipo di dati Array – 4

• L’operatore [ ] permette di accedere o assegnare elementi di un array– $ar[chiave]=val;

– Se l’array $ar non esiste viene creato • questa istruzione può essere usata come sintassi

abbreviata per creare un array– Se l’elemento con indice chiave non esiste

viene creato, altrimenti gli viene assegnato il valore val

A.A. 2005/2006 Basi di Dati e web 35

Tipo di dati Array – 5

– Se si omette la chiave viene aggiunto un elemento con valore pari a val e chiave uguale al valore massimo delle chiavi intere + 1• $ar = array(1 => ‘BO’, ‘cap’ => ‘10302’);$ar[] = ‘CO’;

Equivale ad avere$ar[2] = ‘CO’;

– Se l’array non esiste e si omette la chiave il primo elemento avrà chiave 0

– Usare NULL come chiave è come usare la stringa vuota (‘ ’) che è diverso dall’usare l’operatore [ ]

A.A. 2005/2006 Basi di Dati e web 36

Tipo di dati Array – 6

• Per rimuovere elementi di un array si utilizza la funzione unset(nomevar)– unset($ar[2]) rimuove dall’array $ar l’elemento

con chiave 2– unset($ar) cancella l’intero array

• Per contare il numero di elementi contenutiin un array si utilizza la funzionecount(nomevar)– $ar = array(1 => ‘primo’, 2 => ‘secondo’);

print count($ar) //visualizza la stringa 2

Page 13: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

13

A.A. 2005/2006 Basi di Dati e web 37

Tipo di dati Array – 7

• Conversione in array– Convertendo integer, float, string, boolean e

resource in array si ottiene un array di un elemento con indice 0 e come valore la variabile da convertire

– Convertendo un object in array si ottiene un array che ha come chiavi i nomi delle proprietàdell’oggetto e come valori i loro valori

– Convertendo il valore NULL in array si ottiene l’array vuoto

A.A. 2005/2006 Basi di Dati e web 38

Variabili predefinite – 1

• Il PHP mette a disposizione un certo numero di variabili predefinite

• Sono usate per memorizzare dati diversi– Environment– Input utente– Dati di sessione– …

• Tali variabili sono definite come superglobals: sono quindi disponibili automaticamente, senza doverle dichiarare, nello scope desiderato

A.A. 2005/2006 Basi di Dati e web 39

Variabili predefinite – 2

• $GLOBALSContiene i riferimenti alle variabili globali dello script

• $_SERVERVariabili settate dal web server o relative al contesto di esecuzione dello script

• $_REQUESTVariabili trasmesse allo script mediante i meccanismi GET, POST e COOKIE

• $_GETVariabili trasmesse allo script tramite il metodo GET

• $_POSTVariabili trasmesse allo script tramite il metodo POST

Page 14: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

14

A.A. 2005/2006 Basi di Dati e web 40

Variabili predefinite – 3

• $_FILESVariabili trasmesse allo script mediante upload di file attraverso il metodo HTTP POST

• $_ENVVariabili di environment trasmesse allo script

• $_COOKIEVariabili trasmesse allo script dal browser attraverso i cookie

• $_SESSIONVariabili mantenute in sessione

A.A. 2005/2006 Basi di Dati e web 41

Passaggio parametri

• Esistono due metodi principali per passare parametri ad uno script PHP– GET

I parametri vengono esplicitati con la URL• Il separatore & può essere modificato in php.ini con

la direttiva arg_separator.input– POST

I parametri provengono da un form con clausola method impostata su POST

A.A. 2005/2006 Basi di Dati e web 42

Metodo GET – 1

• I parametri passati al PHP attraverso il metodo GET sono accessibili attraverso l’array $_GEThttp://indirizzo_server/pagina.php?id=20&length=3

print_r($_GET);

visualizza il contenuto di $_GET:$_GET(‘id’ => 20, ‘length’ => 3)

Page 15: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

15

A.A. 2005/2006 Basi di Dati e web 43

Metodo GET – 2

• Attenzione a– Caratteri speciali che non possono essere inseriti nelle

URL (RFC 2396)• http://www.rfc-editor.org/rfc/rfc2396.txt• urlencode()

– Caratteri che nelle URL assumono una funzione particolare (es. &)

• htmlspecialchars()• htmlentities()

– Tipi di dato non scalari (es. array)• devono essere preventivamente

serializzati/deserializzati• serialize()/unserialize()

A.A. 2005/2006 Basi di Dati e web 44

Metodo GET – 3

• urlencode. Restituisce una stringa in cui– tutti i caratteri non-alfanumerici sono sostituiti

dal simbolo % seguito da due cifre esadecimali• Il carattere underscore (_) non viene sostituito

– Gli spazi sono sostituiti dal simbolo plus (+)• serialize. Restituisce una stringa

contenente una rappresentazione byte-stream del parametro ricevuto (e.g., oggetto, array)

• unserialize. Funzione inversa di serialize

A.A. 2005/2006 Basi di Dati e web 45

Metodo GET – 4

• htmlspecialchars. Restituisce una stringa in cui i seguenti caratteri speciali di HTML sono sostituiti:– & (ampersand) -> &amp; – “” (double quote) -> &quot;

(se ENT_NOQUOTES è specificato– ‘’ (single quote) -> &#039;

(se ENT_QUOTES è specificato) – < (less than) -> &lt;– > (greater than) -> &gt;

• htmlentities. Analoga a htmlspecialchars, applica una sostituzione per tutti i caratteri di HTML

Page 16: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

16

A.A. 2005/2006 Basi di Dati e web 46

Metodo GET – 5

• Esempio<?php

$data = “&/fd/”;echo "<a href=‘”;echo htmlspecialchars("/index.php?id=23&data="

. urlencode($data));echo “’>click</a>\n";

?>

Produce<a href=‘/index.php?id=23&amp;data=%26%2Ffd%2F’>

click</a>

A.A. 2005/2006 Basi di Dati e web 47

Metodo POST – 1

• I parametri passati al PHP attraverso il metodo POST sono accessibili attraverso l’array $_POST

• E’ possibile passare array nominando i campi del form in maniera particolare

• Le select multiple devono essere passate come array

A.A. 2005/2006 Basi di Dati e web 48

Metodo POST – 2• Esempio<form action=“index.php” method=“POST”>Titolo:<input type=“text” name=“titolo” /><br />Genere:<select name=“genere[]” multiple=“yes”><option value=“romanzo”>romanzo</option><option value=“giallo”>giallo</option><option value=“saggio”>saggio</option>

</select><br />Pagg:<input type=“text” name=“dati[pagine]” /><br />Anno:<input type=“text” name=“dati[anno]” /><br /><input type=“submit”>

</form>

Page 17: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

17

A.A. 2005/2006 Basi di Dati e web 49

Metodo POST – 3

• Risultato di una submit$_POST( [titolo] => Mistero a Milano,

[genere] => Array ( [0] => giallo, [1] => saggio)

[dati] => Array ([pagine] => 290,[anno] => 1999)

)

A.A. 2005/2006 Basi di Dati e web 50

Operatori di comparazione

• == uguaglianza• === identità (controlla anche i tipi)• != <> disuguaglianza• !== non identità• < minore di• > maggiore di• <= minore uguale• >= maggiore uguale

A.A. 2005/2006 Basi di Dati e web 51

Strutture di controllo

• if – else if – else• while – do while• for• foreach• switch – case

Page 18: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

18

A.A. 2005/2006 Basi di Dati e web 52

Costrutto if

• Permette di legare l’esecuzione di codice al verificarsi di una condizione

• Sintassiif (condizione) {

codice;codice;

}

• Sintassi abbreviataif (condizione)

codice;

A.A. 2005/2006 Basi di Dati e web 53

Costrutto elseif

• Utilizzato in seguito ad un ifif (condizione1){codice1;

}elseif (condizione2){

codice2;}

• La parte di codice contenuta in elseifviene eseguita solo se condizione1restituisce false

A.A. 2005/2006 Basi di Dati e web 54

Costrutto else

• Utilizzato in seguito ad un if o ad un elseifif (condizione){

codice;}else {codice;

}

• La parte di codice contenuta nell’else viene eseguita solo se tutte le precedenti condizioni di if o elseif restituiscono false

Page 19: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

19

A.A. 2005/2006 Basi di Dati e web 55

Costrutto while

• Permette di effettuare loop che vengono ripetuti fintanto che una condizione èverificatawhile (condizione) {

codice;}

A.A. 2005/2006 Basi di Dati e web 56

Costrutto do..while

• Simile al while, ma la condizione viene verificata al termine di ogni iterazione. – l’istruzione viene eseguita almeno una voltado {codice;

}while (condizione);

A.A. 2005/2006 Basi di Dati e web 57

Costrutto for

• Altra sintassi per effettuare loopfor (expr1; expr2; expr3){codice;

}

– expr1: eseguita all’inizio del loop– expr2: eseguita all’inizio di ogni iterazione, se

restituisce false termina il loop• Se expr2 è vuota il loop continua all’infinito

– expr3: eseguita alla fine di ogni iterazione

Page 20: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

20

A.A. 2005/2006 Basi di Dati e web 58

Costrutto foreach

• Ciclo utilizzato per scorrere gli arrayforeach(array as $val){ codice; }foreach(array as $k => $val) {codice; }

– La seconda forma permette di conoscere il valore delle chiavi di un array

– Non è necessario resettare l’array alla fine del ciclo per riassegnare il puntatore al primo elemento

A.A. 2005/2006 Basi di Dati e web 59

Costrutto break

• Fa terminare l’esecuzione di un – for– foreach– while– do...while– switch

A.A. 2005/2006 Basi di Dati e web 60

Costrutto continue

• Usato all’interno di strutture di loop per saltare la parte rimanente dell’iterazione e cominciare dall’inizio quella successiva– Es.

for ($i = 0; $i < 10 ; $i++) {if ($i == 5) {

continue;}echo $i;

}

Il numero 5 non viene stampato

Page 21: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

21

A.A. 2005/2006 Basi di Dati e web 61

Costrutto switch – case

• Simile ad una serie di if diversi sulla stessa condizioneswitch (condizione) {

case ‘val1’:codice;

case ‘val2’:codice;

case ‘val3’:codice;

default:codice;

}

A.A. 2005/2006 Basi di Dati e web 62

Costrutto switch – case

• Il valore restituito dall’espressione valutata in condizione decide il punto di entrata

• In assenza di un istruzione break tutto il codice fino alla fine dello switch viene eseguito (non solo quello del case di ingresso)

• E’ possibile specificare un case default(opzionale)

A.A. 2005/2006 Basi di Dati e web 63

Funzioni – 1

• Definizione:function nomefunzione($arg1, ...., $argn){

codice;return($ret);

}

Nella definizione dopo la parola chiave functionviene specificato il nome della funzione seguito dai parametri (senza specifiche di tipo). L’istruzione return fa terminare l’esecuzione della funzione

Page 22: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

22

A.A. 2005/2006 Basi di Dati e web 64

Funzioni – 2

• Il corpo di una funzione può essere un qualunque pezzo di codice PHP valido (anche la definizione di un’altra funzione o di una classe)

• Una funzione può ritornare un qualsiasi tipo di dato

• Non è previsto l’overloading né la ridefinizione di funzioni

A.A. 2005/2006 Basi di Dati e web 65

Funzioni – 3function media($elem){foreach ($elem as $num){$sum += $num;

}$res = count($elem)?($sum/count($elem)):0;return($res);

}

• L’invocazione della funzione$numeri = array (7, 9, 11);print “La media è “ . media($numeri);

• Restituisce la stringaLa media è 9

A.A. 2005/2006 Basi di Dati e web 66

Funzioni – 4

• Valori di default– La sintassi per specificare valori di default per

un parametro è simile a quella del C++– Il valore di default deve essere una costante.

Non può essere una variabile o una chiamata di funzione

– I parametri che hanno valori di default devono essere indicati nella dichiarazione di funzione dopo tutti quelli che non li hanno

Page 23: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

23

A.A. 2005/2006 Basi di Dati e web 67

Funzioni – 5

function answer($dest, $ans = ‘Sorry’){return($ans.’, ‘.$dest);

}

• Esempi:– print answer(‘Mr. Brown’);

//visualizza Sorry, Mr. Brown– print answer(‘Mr. Brown’, ‘Please’);

//visualizza Please, Mr. Brown

A.A. 2005/2006 Basi di Dati e web 68

Funzioni – 6• Ambito (scope) delle variabili

– Le variabili definite all’interno di una funzione sono chiamate variabili locali

– Le variabili definite al di fuori di una funzione sono chiamate variabili globali e sono accessibili attraverso la variabile predefinita $GLOBALS

$a = 1;$b = 2;

function Sum(){

print $a + $b;$a = 4;$b = 5;print $a + $b;

}print $a + $b; // stampa: 3Sum(); // stampa: 0 9

$a = 1;$b = 2;

function Sum(){

print$GLOBALS[‘a’] + $GLOBALS[‘b’];

$a = 4;$b = 5;print $a + $b;

}print $a + $b; // stampa: 3Sum(); // stampa: 3 9

A.A. 2005/2006 Basi di Dati e web 69

Funzioni – 7

• In alternativa si può utilizzare la parola chiave global

$a = 1;$b = 2;

function Sum(){$GLOBALS[‘a’] = 4; $GLOBALS[‘b’] = 5;print$GLOBALS[‘a’] +$GLOBALS[‘b’];

}Sum(); // stampa: 9print $a + $b; // stampa: 9

$a = 1;$b = 2;

function Sum(){global $a, $b;$a = 4; $b = 5;print $a + $b;

}Sum(); // stampa: 9print $a + $b; // stampa: 9

Page 24: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

24

A.A. 2005/2006 Basi di Dati e web 70

Funzioni – 8

• Passaggio di parametri per referenza– Di norma i parametri

vengono passati alla funzione per valore

– Se si desidera passare un parametro per referenza (in modo che eventuali modifiche vengano rese disponibili al di fuori dello scope della funzione) occorre modificare la sintassi di dichiarazione della funzione (&)

$a = 1;$b = 2;

function Sum(&$a,&$b){$a = 4; $b = 5;print $a + $b;

}Sum($a,$b); // stampa: 9print $a + $b; // stampa: 9

A.A. 2005/2006 Basi di Dati e web 71

Oggetti – 1

• Principali novità introdotte nella versione 5– Modificatori di accesso

•public, private, protected

– Nome del costruttore unificato•__construct()

– Deallocazione di oggetti•__destruct()

– Interfacce• Consente ad una classe di avere più di una

relazione di ereditarietà

A.A. 2005/2006 Basi di Dati e web 72

Oggetti – 2

– Metodi e classi di tipo final• Non ulteriormente ridefinibili nelle sottoclassi

– Costanti di classe•const

– Proprietà e metodi statici• Richiamabili da un contesto diverso da un oggetto

– Metodi e classi astratte• Non istanziabile ma estensibile

– Gestione delle eccezioni•try, throw, catch

Page 25: Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P

25

A.A. 2005/2006 Basi di Dati e web 73

Oggetti – 3class conn_exception extends Exception {public $problem;function __construct($problem) {$this->problem = $problem;}

}try {throw new conn_exception("impossibile eseguire la connessione");print "Codice mai eseguito";} catch (conn_exception $e) {print "Rilevato errore: $e->problem";} catch (Exception $e) {print "Rilevato errore non riconosciuto";}

Solleva un’eccezione conn_exception che stampa a video la stringa: Rilevato errore: impossibile eseguire la connessione

A.A. 2005/2006 Basi di Dati e web 74

Riferimenti

• Sito PHP– http://www.php.net

• Manuale– http://www.php.net/manual/en/

• Libri– David Sklar,

PHP 5 - Elementi di programmazioneMcGraw-Hill, 2005

– A. Gutmans, S. Bakken, D. Rethans,PHP 5 Guida CompletaApogeo, 2005