Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P

1,456 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,456
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P

  1. 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 1 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 2 Introduzione – 2 • Sintassi semplice (C-like) • Codice PHP embedded in pagine HTML • Grande disponibilità di librerie • Modello di programmazione OO A.A. 2005/2006 Basi di Dati e web 3 1
  2. 2. 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 4 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 5 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) A.A. 2005/2006 Basi di Dati e web 6 2
  3. 3. Introduzione – 6 • Supporto a numerosi DBMS – Adabas D – Solid – Ingres – Hyperwave – Oracle – Direct MS-SQL – dBase – Sybase – InterBase – IBM DB2 – Ovrimos – MySQL – Empress – Velocis – FrontBase – Informix – PostgreSQL – ODBC – FilePro (read-only) – Unix dbm – mSQL A.A. 2005/2006 Basi di Dati e web 7 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 8 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 A.A. 2005/2006 Basi di Dati e web 9 3
  4. 4. 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 PHPinstallDIRextensions – Aggiungere PHPinstallDIR alla variabile di sistema path A.A. 2005/2006 Basi di Dati e web 10 Configurazione – 1 • Configurazione di Apache per il supporto al PHP – Modificare il file httpd.conf • LoadModule php5_module quot;PHPinstallDIR/php5apache2.dllquot; • AddType application/x-httpd-php .php • PHPIniDir quot;PHPinstallDIRquot; A.A. 2005/2006 Basi di Dati e web 11 Configurazione – 2 • Configurazione PHP (php.ini) – Permette di configurare a runtime il comportamento dell’interprete – Modificare le direttive • include_path = quot;PHPinstallDIRincludes“ Elenco di directory in cui verranno ricercati i file richiamati da eventuali include() e require() • extension_dir = quot;PHPinstallDIRextensions“ 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 A.A. 2005/2006 Basi di Dati e web 12 4
  5. 5. 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(quot;max_execution_timequot;, quot;60quot;); • 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 13 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 14 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 A.A. 2005/2006 Basi di Dati e web 15 5
  6. 6. 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 16 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 17 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 A.A. 2005/2006 Basi di Dati e web 18 6
  7. 7. 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 19 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 20 Tipi di dati • Tipi di dati supportati – Scalari – Tipi speciali • Boolean • Resource • Integer • Null • Float • String – Tipi complessi • Array • Object A.A. 2005/2006 Basi di Dati e web 21 7
  8. 8. 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 22 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 23 Tipo di dati Float • Conosciuti anche come double o real – Es. $float = 1.3245; $float = 1.3e2; $float = 7E-10; A.A. 2005/2006 Basi di Dati e web 24 8
  9. 9. 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 di variabili */ $string = <<<KEYWORD Sintassi Here document. Tutto ciò che compare prima della parola chiave (keyword in questo caso) è assegnato come stringa alla variabile $string KEYWORD A.A. 2005/2006 Basi di Dati e web 25 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 26 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” A.A. 2005/2006 Basi di Dati e web 27 9
  10. 10. 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 28 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 usare print_r($array); var_dump($object); A.A. 2005/2006 Basi di Dati e web 29 Tipo di dati String – 6 • 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+quot;10.5quot;; //$var is float (11.5) $var = 1+quot;-1.3e3quot;; //$var is float (-1299) $var = 1+quot;bob-1.3e3quot;; //$var is integer (1) $var = 1+quot;bob3quot;; //$var is integer (1) $var = 1+quot;10 wordsquot;; //$var is integer (11) $var = 4+quot;10.2 wordsquot;; //$var is float (14.2) $var = quot;10.0 pigs quot; + 1; //$var is float (11) $var = quot;10.0 pigs quot; + 1.0; //$var is float (11) A.A. 2005/2006 Basi di Dati e web 30 10
  11. 11. 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 31 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 32 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 A.A. 2005/2006 Basi di Dati e web 33 11
  12. 12. 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 34 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 35 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 contenuti in un array si utilizza la funzione count(nomevar) – $ar = array(1 => ‘primo’, 2 => ‘secondo’); print count($ar) //visualizza la stringa 2 A.A. 2005/2006 Basi di Dati e web 36 12
  13. 13. 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 37 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 38 Variabili predefinite – 2 • $GLOBALS Contiene i riferimenti alle variabili globali dello script • $_SERVER Variabili settate dal web server o relative al contesto di esecuzione dello script • $_REQUEST Variabili trasmesse allo script mediante i meccanismi GET, POST e COOKIE • $_GET Variabili trasmesse allo script tramite il metodo GET • $_POST Variabili trasmesse allo script tramite il metodo POST A.A. 2005/2006 Basi di Dati e web 39 13
  14. 14. Variabili predefinite – 3 • $_FILES Variabili trasmesse allo script mediante upload di file attraverso il metodo HTTP POST • $_ENV Variabili di environment trasmesse allo script • $_COOKIE Variabili trasmesse allo script dal browser attraverso i cookie • $_SESSION Variabili mantenute in sessione A.A. 2005/2006 Basi di Dati e web 40 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 41 Metodo GET – 1 • I parametri passati al PHP attraverso il metodo GET sono accessibili attraverso l’array $_GET http://indirizzo_server/pagina.php?id=20&length=3 print_r($_GET); visualizza il contenuto di $_GET: $_GET(‘id’ => 20, ‘length’ => 3) A.A. 2005/2006 Basi di Dati e web 42 14
  15. 15. 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 43 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 44 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) -> ' (se ENT_QUOTES è specificato) – < (less than) -> &lt; – > (greater than) -> &gt; • htmlentities. Analoga a htmlspecialchars, applica una sostituzione per tutti i caratteri di HTML A.A. 2005/2006 Basi di Dati e web 45 15
  16. 16. Metodo GET – 5 • Esempio <?php $data = “&/fd/”; echo quot;<a href=‘”; echo htmlspecialchars(quot;/index.php?id=23&data=quot; . urlencode($data)); echo “’>click</a>nquot;; ?> Produce <a href=‘/index.php?id=23&amp;data=%26%2Ffd%2F’> click</a> A.A. 2005/2006 Basi di Dati e web 46 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 47 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> A.A. 2005/2006 Basi di Dati e web 48 16
  17. 17. 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 49 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 50 Strutture di controllo • if – else if – else • while – do while • for • foreach • switch – case A.A. 2005/2006 Basi di Dati e web 51 17
  18. 18. Costrutto if • Permette di legare l’esecuzione di codice al verificarsi di una condizione • Sintassi if (condizione) { codice; codice; } • Sintassi abbreviata if (condizione) codice; A.A. 2005/2006 Basi di Dati e web 52 Costrutto elseif • Utilizzato in seguito ad un if if (condizione1){ codice1; } elseif (condizione2){ codice2; } • La parte di codice contenuta in elseif viene eseguita solo se condizione1 restituisce false A.A. 2005/2006 Basi di Dati e web 53 Costrutto else • Utilizzato in seguito ad un if o ad un elseif if (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 A.A. 2005/2006 Basi di Dati e web 54 18
  19. 19. Costrutto while • Permette di effettuare loop che vengono ripetuti fintanto che una condizione è verificata while (condizione) { codice; } A.A. 2005/2006 Basi di Dati e web 55 Costrutto do..while • Simile al while, ma la condizione viene verificata al termine di ogni iterazione. – l’istruzione viene eseguita almeno una volta do { codice; } while (condizione); A.A. 2005/2006 Basi di Dati e web 56 Costrutto for • Altra sintassi per effettuare loop for (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 A.A. 2005/2006 Basi di Dati e web 57 19
  20. 20. Costrutto foreach • Ciclo utilizzato per scorrere gli array foreach(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 58 Costrutto break • Fa terminare l’esecuzione di un – for – foreach – while – do...while – switch A.A. 2005/2006 Basi di Dati e web 59 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 A.A. 2005/2006 Basi di Dati e web 60 20
  21. 21. Costrutto switch – case • Simile ad una serie di if diversi sulla stessa condizione switch (condizione) { case ‘val1’: codice; case ‘val2’: codice; case ‘val3’: codice; default: codice; } A.A. 2005/2006 Basi di Dati e web 61 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 62 Funzioni – 1 • Definizione: function nomefunzione($arg1, ...., $argn){ codice; return($ret); } Nella definizione dopo la parola chiave function viene specificato il nome della funzione seguito dai parametri (senza specifiche di tipo). L’istruzione return fa terminare l’esecuzione della funzione A.A. 2005/2006 Basi di Dati e web 63 21
  22. 22. 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 64 Funzioni – 3 function 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 stringa La media è 9 A.A. 2005/2006 Basi di Dati e web 65 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 A.A. 2005/2006 Basi di Dati e web 66 22
  23. 23. 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 67 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; $a = 1; $b = 2; $b = 2; function Sum() function Sum() { { print print $a + $b; $GLOBALS[‘a’] + $GLOBALS[‘b’]; $a = 4; $a = 4; $b = 5; $b = 5; print $a + $b; print $a + $b; } } print $a + $b; // stampa: 3 print $a + $b; // stampa: 3 Sum(); // stampa: 0 9 Sum(); // stampa: 3 9 A.A. 2005/2006 Basi di Dati e web 68 Funzioni – 7 • In alternativa si può utilizzare la parola chiave global $a = 1; $a = 1; $b = 2; $b = 2; function Sum() function Sum() { { $GLOBALS[‘a’] = 4; global $a, $b; $GLOBALS[‘b’] = 5; $a = 4; print $b = 5; $GLOBALS[‘a’] +$GLOBALS[‘b’]; print $a + $b; } } Sum(); // stampa: 9 Sum(); // stampa: 9 print $a + $b; // stampa: 9 print $a + $b; // stampa: 9 A.A. 2005/2006 Basi di Dati e web 69 23
  24. 24. Funzioni – 8 • Passaggio di parametri per referenza $a = 1; – Di norma i parametri $b = 2; vengono passati alla function Sum(&$a,&$b) funzione per valore { – Se si desidera passare un $a = 4; parametro per referenza $b = 5; (in modo che eventuali print $a + $b; modifiche vengano rese } Sum($a,$b); // stampa: 9 disponibili al di fuori dello print $a + $b; // stampa: 9 scope della funzione) occorre modificare la sintassi di dichiarazione della funzione (&) A.A. 2005/2006 Basi di Dati e web 70 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 71 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 A.A. 2005/2006 Basi di Dati e web 72 24
  25. 25. Oggetti – 3 class conn_exception extends Exception { public $problem; function __construct($problem) { $this->problem = $problem; } } try { throw new conn_exception(quot;impossibile eseguire la connessionequot;); print quot;Codice mai eseguitoquot;; } catch (conn_exception $e) { print quot;Rilevato errore: $e->problemquot;; } catch (Exception $e) { print quot;Rilevato errore non riconosciutoquot;; } 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 73 Riferimenti • Sito PHP – http://www.php.net • Manuale – http://www.php.net/manual/en/ • Libri – David Sklar, PHP 5 - Elementi di programmazione McGraw-Hill, 2005 – A. Gutmans, S. Bakken, D. Rethans, PHP 5 Guida Completa Apogeo, 2005 A.A. 2005/2006 Basi di Dati e web 74 25

×