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
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)
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
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
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
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
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
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;
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”
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)
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
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
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
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)
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) -> & – “” (double quote) -> "
(se ENT_NOQUOTES è specificato– ‘’ (single quote) -> '
(se ENT_QUOTES è specificato) – < (less than) -> <– > (greater than) -> >
• htmlentities. Analoga a htmlspecialchars, applica una sostituzione per tutti i caratteri di HTML
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&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>
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
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
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
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
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
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
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
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
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