Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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) -> &
– “” (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
A.A. 2005/2006 Basi di Dati e web 45
15
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&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. 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. 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. 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. 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. 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. 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. 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. 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. 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