Array, operatori, costrutti

PHP – 2
Array, operatori, costrutti
1
Array in PHP
 Gli
array conservano un gruppo di valori
che possiamo recuperare o attraverso
un numero intero (iniziando dallo 0)
oppure attraverso una stringa (array
associativi)
 Esempio
$vino['sa'] = "Furore Bianco";
$vino['av'] = "Greco di Tufo";
$vino['na'] = "Biancolella";
Tecnologie di Sviluppo per il WEB
2
Creazione Array

Si può creare un array semplicemente
inserendo degli elementi in esso
$professori[0] = “costagliola”;
$professori[1] = “blundo”;
$professori[2] = “parente”;
equivalente a:
$professori[] = “costagliola”;
$professori[] = “blundo”;
$professori[] = “parente”;

La funzione array() serve a creare un array. I
parametri passati in input sono usati come
elementi dell’array
$professori = array(“costagliola”, “blundo”, “parente”);
Tecnologie di Sviluppo per il WEB
3
Esempio
$spesa = array("mele", "pere", "pane", "latte");
// oppure
$spesa[0] = "mele";
$spesa[1] = "pere";
$spesa[2] = "pane";
$spesa[3] = "latte";
// ma anche
$spesa[] = "mele";
$spesa[] = "pere";
$spesa[] = "pane";
$spesa[] = "latte";
Tecnologie di Sviluppo per il WEB
4
Accesso ad array
 La
funzione count restituisce la
grandezza dell’array
 Per accedere all’elemento i-esimo si
accede all’elemento i-1
– $professori[2];
 Se
si accede ad un elemento non
inizializzato non viene generato nessun
errore
Tecnologie di Sviluppo per il WEB
5
Esempio
ESEMPIO
<?php
$professori[] = "blundo";
$professori[] = "costagliola";
$professori[2] = "parente";
$professori[10] = "d'ambrosio";
printf(“L'array contiene %d elementi\n”, count($professori));
print(“<br>”);
for($i=0; $i< count($professori); $i++) {
echo $i+1,") ";
print(ucwords($professori[$i])); print("<br>"); }
echo "Undicesimo elemento: ",$professori[10],"<br>";
echo "Centesimo elemento: ", $professori[99];
?>
Tecnologie di Sviluppo per il WEB
6
Risultato
Tecnologie di Sviluppo per il WEB
7
Nota
 Invece
di scrivere
for($i=0; $i< count($professori); $i++)
è meglio scrivere
$cnt = count($professori);
for($i=0; $i<$cnt; $i++)
 In
questo modo la funzione count() è
invocata solo una volta e non
count($professori) volte
Tecnologie di Sviluppo per il WEB
8
Altro modo per creare array
 Usando
l’operatore => si possono
specificare gli indici dell’array per ogni
elemento, se non lo si usa l’array
costruito è indicizzato sugli interi a
partire dallo 0 (zero)
$frutta = array(1=>”mele”, 2=>”pere”, 3=>”banane”);
Tecnologie di Sviluppo per il WEB
9
Esempio
<?php
$frutta = array(1=>"mele", 2=>"pere", 3=>"banane");
$cnt=count($frutta);
for($i=1; $i<= $cnt; $i++)
echo $i, ") ", $frutta[$i], "<br>";
?>
Tecnologie di Sviluppo per il WEB
10
Esempio di array associativo
$corso['blundo'] = “tsw1”;
$corso['costagliola'] = “tsw2”
$corso['parente'] = “tsw3”;
Oppure
$corso = array('blundo' => 'tsw1' ,
'costagliola' => “tsw2” ,
'parente' => 'tsw3'
);
Tecnologie di Sviluppo per il WEB
11
Accesso ad array associativi
 Per
far riferimento ad un elemento
dell’array
associativo
usiamo
la
seguente sintassi:
– $corso[parente]
– $corso['costagliola']
– $corso["blundo"]
– $corso[$nome]
Tecnologie di Sviluppo per il WEB
12
Esempio
<?php
$corso = array('blundo' => 'tsw1', "costagliola" => 'tsw2',
'parente' => 'tsw3');
echo $corso[blundo],"<br>";
echo $corso['costagliola'],"<br>";
echo $corso["parente"],"<br>";
$nome= "blundo";
echo $corso[$nome];
?>
Tecnologie di Sviluppo per il WEB
13
Accesso alle chiavi (indici) di un array
 In
PHP possiamo accedere anche al
valore delle chiavi (indici) di un array
associativo senza conoscerle.
 Si usa la funzione each($NomeArray) e
le parole chiave key e value
$corso e' il nome dell'array:
for($i=0; $i< $cnt; $i++) {
$riga = each($corso);
echo $riga[key], " insegna ", $riga["value"],"<br>";
}
Tecnologie di Sviluppo per il WEB
ESMPIO
14
La funzione each()

Ogni array in PHP conserva traccia del
corrente elemento con cui stiamo lavorando
– Il puntatore all’elemento corrente è noto come
iteratore

La funzione each() restituisce un array
associativo che contiene due elementi e
muove l’iteratore una posizione in avanti
– Il primo elemento è indicizzato dalla stringa key
– Il secondo elemento è indicizzato dalla stringa
value
Tecnologie di Sviluppo per il WEB
15
Altre funzioni su iteratori

current()
– Restituisce il valore dell’elemento puntato
dall’iteratore corrente

key()
– Restituisce la chiave dell’elemento corrente

reset()
– Muove l’iteratore al primo elemento
dell’array

next() – prev() – end()
Tecnologie di Sviluppo per il WEB
16
Esempio
<h2>Utilizzo di iteratori su array</h2>
<?php
$corso = array(blundo => 'tsw1', "parente" => 'tsw2', 'cost' => 'tsw3');
reset($corso);
echo "<table border=\"2\">\n";
echo "<tr> <th> Chiave </th> <th> Elemento </th> </tr>\n";
echo "<tr> <td> ", key($corso), "</td> <td>", current($corso), "</td> </tr>\n";
while(next($corso)) {
echo "<tr> <td> ", key($corso), "</td> <td>", current($corso), "</td> </tr>\n";
}
echo "</table>\n";
?>
Tecnologie di Sviluppo per il WEB
ESEMPIO
17
HTML inviato al client
<h2>Utilizzo di iteratori su array</h2>
<table border="2">
<tr> <th> Chiave </th> <th> Elemento </th> </tr>
<tr> <td> blundo</td> <td>tsw1</td> </tr>
<tr> <td> parente</td> <td>tsw2</td> </tr>
<tr> <td> costagliola</td> <td>tsw3</td> </tr>
</table>
Tecnologie di Sviluppo per il WEB
18
Ordinare
array
 sort()
– Ordina i valori dell’array (crescente)
• distrugge il valore delle chiavi

asort()
– Ordina i valori dell’array conservando
correlazione tra il valore e la sua chiave

la
ksort()
– Ordina le chiavi conservando la correlazione tra il
valore e la sua chiave

rsort() – rasort() – rksort()
– Ordinamento in ordine inverso
ESEMPIO
Tecnologie di Sviluppo per il WEB
19
Ordinare array secondo un proprio ordine

usort(NomeArray, NomeFunzione)
– ordina NomeArray secondo il criterio
specificato dalla funzione NomeFunzione
function cmp ($a, $b) {
if ($a == $b)
return 0;
La funzione list
return ($a < $b) ? -1 : 1;
copia i valori
}
dell'array nelle vbls
$arr = array (3, 2, 5, 6, 1);
usort ($arr, "cmp");
while (list ($chiavve, $vallore) = each ($arr)) {
Ordinamento
echo "$chiavve: $vallore\n"; }
crescente di $a
Tecnologie di Sviluppo per il WEB
20
Risultato
 Il
risultato dello script precedente è
0: 1
1: 2
2: 3
3: 5
4: 6
 E'
un esempio, sarebbe stato più
opportuno usare la funzione sort()
 E' spesso usata per array
multidimensionali.
Tecnologie di Sviluppo per il WEB
21
Nota
 La
funzione di confronto scritta
dall’utente deve ricevere in input due
parametri e restituire un intero
– Minore di zero se il primo parametro è da
considerarsi minore del secondo
– Uguale a zero se i due parametri sono da
considerarsi uguali
– Maggiore di zero se il primo parametro è
da considerarsi maggiore del secondo
Tecnologie di Sviluppo per il WEB
22
Array multidimensionali – 1
 Ogni
elemento di un array può essere
di tipo qualunque, anche di tipo array
 Un array multidimensionale è un array
che contiene altri array
for($i=1; $i < $n; $i++)
for($j=1; $j < $n; $j++)
$a[$i][$j] = $i * $j;
Tecnologie di Sviluppo per il WEB
23
Array multidimensionali – 2
$riga0 = array(1, 2, 3);
$riga1 = array(4, 5, 6);
$riga2 = array(7, 8, 9);
$multi = array($riga0, $riga1, $riga2);
print_r($multi); /* human readable print */
Tecnologie di Sviluppo per il WEB
24
Ordinare array multipli con usort
$products = array(
array( 'Tires', 100 ),
array( 'Oil', 10 ),
array( 'Spark Plugs', 4 ));
ordina sulla seconda
colonna
ESEMPIO
function compare($x, $y){
if ( $x[1] == $y[1] ) return 0;
else if ( $x[1] < $y[1] )
return -1;
else
return 1;
}
usort($products, 'compare');
Tecnologie di Sviluppo per il WEB
25
Funzioni su array (1/2)


array_pad(array, nbr_elmnts, value)
– Restituisce un nuovo array con nbr_elmnts,
padded con altri elementi inizializzati allo stesso
value.
Esempi:
– $scores = array(3,10);
– $padded=array_pad($scores, 5,0);
• $padded è (3,10,0,0,0);
– $padded=array_pad($scores,-5,0);
• $padded è (0,0,0,0,0)
– $scores=array_pad($scores,5,0)
• modifica “in situ”
Tecnologie di Sviluppo per il WEB
26
Funzioni su array (2/2)

array_chunk(array, size [,preserve_keys])
– Restituisce un array multidimensionale fatto degli
elementi di array. Ogni riga è lunga size
– preserve_keys: booleano

array_slice(array, offset, length)
– Restituisce un sotto-array di array lungo length a
partire dalla posizione offset

list($var1, $var2, …) = $array
– Copia i valori di $array nelle variabili $var1, $var2

array_key_exists(chiave, array)
– Restituisce un booleano se esiste la chiave nell'array.

in_array(valore, array)
– Booleano: se valore è in array
Chunk
Tecnologie di Sviluppo per il WEB
27
Esempio di list

È usata per assegnare valori ad una lista
di variabili in una sola istruzione, i valori
sono presi da un array
$info = array('caffè', 'scuro', 'caffeina');
// assegna tutte le variabili
list($bevanda, $colore, $componente) = $info;
// assegna solo in parte
list($bevanda, , $componente) = $info;
// assegna solo l'ultima variabile
list( , , $componente) = $info;
Tecnologie di Sviluppo per il WEB
28
Altre funzioni sugli array

array_walk(array, func[,terzoPrmtr] )
– Chiama la funzione func su ogni elemento
dell’array
– func deve avere almeno due parametri
(opzionalmente tre): il primo identifica il valore
dell'elemento; il secondo identifica la chiave; il
terzo un parametro generico di func.

array_filter(array, func)
– Restituisce un array. Ogni valore di array è
passato a func, l’array restituito contiene solo
quegli elementi di array per cui la funzione func ha
restituito true
Tecnologie di Sviluppo per il WEB
29
Esempio di array_walk
<h2>Utilizzo di funzioni su array</h2>
<?php
$frutta = array ("uno"=>"limone", "due"=>"arancia",
"tre"=>"banana");
function modifica (&$elemento, $chiave, $prefisso) {
$elemento = "$prefisso:::::::::: $elemento"; }
function stampa ($elemento, $chiave) {
echo "$chiave: $elemento<br>\n"; }
/* write */
/* read */
echo "<h3>Prima ...:\n</h3>";
array_walk ($frutta, 'stampa');
array_walk ($frutta, 'modifica', 'frutto');
echo "<h3>... e dopo:\n</h3>";
array_walk ($frutta, 'stampa');
?>
Tecnologie di Sviluppo per il WEB
ESEMPIO
30
Esempio array_filter
<h2>Utilizzo di array_filter</h2>
<?php
function dispari($var) { return ($var % 2); }
function pari($var) { return (!($var % 2)); }
$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array (6, 7, 8, 9, 10, 11, 12);
echo "<h3>Array iniziali :</h3>\n";
print_r($array1); echo "<br>"; print_r($array2);
echo "<h3>Applico la funzione 'dispari' al primo array :</h3>\n";
print_r(array_filter($array1, "dispari"));
echo "<h3>Applico la funzione 'pari' al secondo array:\n</h3>";
print_r(array_filter($array2, "pari"));
?>
esempioWalkconFilter
Tecnologie di Sviluppo per il WEB
ESEMPIO
31
Conversione tra variabili e array

PHP fornisce due funzioni extract() e compact()
che permettono di creare variabili da array e
viceversa
– Si usano con gli array associativi
$frutta = array ("uno"=>"limone", "due"=>"arancia", "tre"=>"banana");
extract($frutta);

Dopo esistono le variabili $uno, $due e $tre,
con i valori limone, arancia e banana,
rispettivamente.
Tecnologie di Sviluppo per il WEB
32
Nota su extract()

Possiamo aggiungere automaticamente
prefisso a tutte le variabili create
un
extract($NomeArray, EXTR_PREFIX_SAME, “prefisso”)

Tutte le variabili che vanno in conflitto con una
vbl esistente (con lo stesso nome) inizieranno
con
prefisso_
extract($frutta, EXTR_PREFIX_SAME, “gusto”);
echo $gusto_uno;
Tecnologie di Sviluppo per il WEB
33
compact()
È
il complemento di extract()
– A partire da una lista di variabili, crea un
array associativo le cui chiavi sono i nomi
delle variabili
$nome = "ambrogio";
$cognome = "unz";
$corso = "tsw";
$record = compact('nome', 'cognome', 'corso');
// oppure
$chiavi=array(nome, cognome, corso);
$record=compact($chiavi);
Tecnologie di Sviluppo per il WEB
34
Array e stringhe
 In
PHP esistono due funzioni per
passare da una stringa ad un array e
viceversa
 explode()
– Passa da una stringa ad un array

implode()
– Passa da un array ad una stringa
Tecnologie di Sviluppo per il WEB
35
explode()


Applicata su una stringa restituisce un array
di sottostringhe individuate dal delimitatore
Sintassi
explode(delimitatore, stringa [, limite])
• limite è un parametro opzionale che indica il
massimo numero di elementi da estrarre da
stringa

Esempio
$pizza = "mozzarella pomodoro basilico olio";
$ingredienti = explode(" ", $pizza);
Tecnologie di Sviluppo per il WEB
36
implode()
 Applicata
ad un array restituisce una
stringa rappresentante gli elementi
dell’array divisi da un separatore
 Sintassi
implode(separatore, array)
 Esempio
$array = array('ambrogio', 'ambunz@unisa.it');
$stringa = implode(",", $array);
ESEMPIO
Tecnologie di Sviluppo per il WEB
37
Oggetti in PHP
 PHP
supporta la
orientata agli oggetti
 PHP supporta
programmazione
– Incapsulazione
– Polimorfismo
– Ereditarietà
 L’ereditarietà
multipla è supportata
come in JAVA (con le interfacce)
 Vedremo un esempio di OOP con una
classe per MySQL (?)
Tecnologie di Sviluppo per il WEB
38
PHP: 5 – 4
 Membri
(1)
e metodi
– public
– private
– Protected
 Metodi
e Classi
– Astratte
• Solo firme, senza implementazioni
 Interfacce
Tecnologie di Sviluppo per il WEB
39
PHP: 5 – 4
 La
(2)
parola chiave per metodi e membri
– final
 Clonare
Oggetti
– function __clone()
• Viene verificato se esiste un tale metodo nella
classe. In caso negativo una versione di default
viene invocata.
Tecnologie di Sviluppo per il WEB
40
PHP: 5 – 4
 Costruttore
(3)
Unificati
– function __construct()
• È utile per invocare costruttori di genitori da
classi derivate
– Non c'è bisogno di conoscere il nome
 Distruttori
– function __destruct()
• Quando l'ultimo riferimento ad un oggetto è
distrutto, il metodo distruttore viene invocato.
• Non ha parametri
Tecnologie di Sviluppo per il WEB
41
PHP: 5 – 4
(4)
 Costanti
– const cstn= “HELLO WORLD”;
 Eccezioni
– C'è il supporto per la clausola
• catch all
– Ma non per quella
• finally
 Vbls
membri static di Classi Statiche
possono ora essere inizializzate
 Metodi statici
Tecnologie di Sviluppo per il WEB
42
PHP: 5 – 4
(5)
 Metodo
– Instanceof
• Utile per accertarsi se un oggetto è una istanza
di una classe, estende una classe oppure
implementa un'interfaccia
 Iterazione

<?php class Foo { var $x = 1; var $y = 2; }

$obj = new Foo;

foreach ($obj as $prp_name => $prop_value) {
echo “$prp_name = $prop_value\n”;

}


?>
Tecnologie di Sviluppo per il WEB
43
PHP: 5 – 4
 Il
(6)
nuovo metodo magico
– __toString()
• Permette di sovraccaricare la conversione a
stringa dell'oggetto

 Altri
dettagli all'URL
– http://www.zend.com/php5/articles/engine2-php5-changes.php
Tecnologie di Sviluppo per il WEB
44
Operatori in PHP – 1
 Aritmetici
+, -, *, /, %
 Assegnamento
= (supporta la forma abbreviata: e.g., += )
 Incremento/decremento
++ e -- (prefisso/postfisso)
 Operatori
bitwise
&, |, ^ (xor), ~, <<, >>
Tecnologie di Sviluppo per il WEB
45
Operatori in PHP – 2
 Confronto
==, ===(tipato), !=, !==, <, >, <=, >=
 Logici
&&, and, ||, or, xor, !
 Condizionale
?: (if aritmetico)
 Casting
(int), (float), (string), (bool), (array), (object)
Tecnologie di Sviluppo per il WEB
46
Operatori in PHP – 3
 Controllo
dell’errore (@)
– Quando @ precede un comando, gli errori
eventualmente generati sono ignorati
 Esecuzione
(`)
– La stringa all’interno di ` (backtick) è
passata alla shell per essere eseguita:
$output = `ls -al`;
echo "<pre>$output</pre>";
– domanda: se tolgo <pre>??
backtick.php
Tecnologie di Sviluppo per il WEB
47
Operatori di confronto

L’operatore == testa se due espressioni sono
uguali (anche dopo aver effettuato delle
conversioni di tipo)
• “1” == “1” -> true
• “1” == 1 -> true

L’operatore === testa se due espressioni
sono identiche (le due espressioni devono
essere uguali e dello stesso tipo)
• “1” === “1” -> true
• “1” === 1 -> false
ESEMPIO
Tecnologie di Sviluppo per il WEB
48
Istruzioni per il controllo del flusso – 1
 if

(condizione)
istruzioni
if(condizione)
istruzioni1
else
istruzioni2
Tecnologie di Sviluppo per il WEB
49
Istruzioni per il controllo del flusso – 2
 if(condizione1)
istruzioni1
elseif(condizione2)
istruzioni2
….
else
istruzioniN
Tecnologie di Sviluppo per il WEB
50
Istruzioni per il controllo del flusso – 3
 Istruzione
switch
switch($a)
{
case 1:
print("a è uguale a uno");
break;
case 2:
print("a è uguale a due");
break;
default:
print("a non vale né uno né due");
}
Tecnologie di Sviluppo per il WEB
51
Cicli
 while(condizione)
istruzioni
 do
istruzioni
while(condizione);

for(inizializzazione; condizione; incremento)
istruzioni
Tecnologie di Sviluppo per il WEB
52
Ciclo foreach



Permettere di iterare sugli elementi di un array
foreach($nomeArray as $elemento) {
istruzioni
}
$elemento assumerà tutti i valori contenuti in
$nomeArray
Tecnologie di Sviluppo per il WEB
53
Ciclo foreach – 2
Possiamo scorrere contemporaneamente le
chiavi e gli elementi di un array
foreach($nomeArray as $indice => $elemento) {
istruzioni
}
 Le
variabili $indice ed
$elemento
assumeranno, rispettivamente, tutti i valori
delle chiavi e degli elementi contenuti in
$nomeArray

Tecnologie di Sviluppo per il WEB
54
exit
 Termina
l’esecuzione di uno script
 Ha un argomento opzionale
– Se è un numero, indica lo stato di uscita del
processo
– Se è una stringa, viene stampata prima che
il processo termini
– exit() è un sinonimo di die()
$handle = @mysql_connect(“localhost”,$user, $passwd)
or die(“Connessione fallita”);
Tecnologie di Sviluppo per il WEB
55
Includere del codice – 1
 PHP
offre due possibilità per includere
un documento (e.g., una libreria) in uno
script PHP
include e require
 La differenza principale è che require
genera un errore fatale se non si trova il
file da includere; mentre, include genera
solo un warning
 Sintassi
– include ‘NomeFile’; require ‘NomeFile’
Tecnologie di Sviluppo per il WEB
56
Includere del codice – 2
 Per
sopprimere gli errori possiamo
usare @include
 In genere require è usato per includere
delle librerie; mentre, include è usato
per includere del codice HTML comune
a più documenti
 Inclusioni di file con estensione .php
includono l’output dello script
– quindi...
Tecnologie di Sviluppo per il WEB
57
Includere del codice – 3
Per cui si usa l’estensione .inc per le
librerie e l’estensione .html per documenti
 Un modo più efficiente per gestire
intestazioni e piè pagina è quello di
includere una libreria e poi invocare delle
funzioni per generare le parti comuni
 Se vogliamo essere sicuri che il file sia
inserito
una
sola
volta
usiamo
require_once e include_once

Tecnologie di Sviluppo per il WEB
58
Esempio – pagina.php
<html>
<head> ….. </head>
<body>
ESEMPIO
<?php include ‘header.html’; ?>
Contenuto HTML
<?php include ‘footer.html’; ?>
</body>
</html>
Potrebbe andare in un
file che viene incluso
Tecnologie di Sviluppo per il WEB
59
Esempio di Libreria
<html>
<head> ….. </head>
<body>
<?php require_once ‘sito.inc’; genHeader(); ?>
Contenuto HTML
<?php genFooter(); ?>
</body>
</html>
Tecnologie di Sviluppo per il WEB
60
Funzioni in PHP – 1


La sintassi per definire una funzione in PHP è
la seguente:
function NomeFunzione([lista parametri]) {
implementazione
}
La lista dei parametri è una sequenza di
variabili separate da virgola
–
–
–
–
Non è permesso l’overloading
Il nome delle funzioni NON è case sensitive
È possibile usare un numero variabile di argomenti
Inoltre ad ogni parametro può essere assegnato un
valore di default...: att.ne (vedi slides successive)
Tecnologie di Sviluppo per il WEB
61
Valori di default
<?php // il terzo parametro ha un valore di default
function descrivi_film($titolo, $regista, $bn_colori = 'colori')
{ echo "Titolo: $titolo <br>";
echo "Regista: $regista <br>";
echo "B/N - colori: $bn_colori <br>";
}
// chiamo la funzione passando 2 soli parametri
// il terzo è sottointeso
descrivi_film('Il malato immaginario','Tonino Cervi');
echo '<br>';
// chiamo la funzione passando tutti e 3 i parametri
descrivi_film('I soliti ignoti','Mario Monicelli','bianco e nero');
?>
Tecnologie di Sviluppo per il WEB
62
Scope di vlbs: (meravigliati?)
1. <?php
2. function quadrato($a)
3. {
4. $a = $a * $a;
5. }
6.
7. $numero = 2;
8. quadrato($numero);
9. echo $numero; //stampa 2 !!!
10. ?>
Tecnologie di Sviluppo per il WEB
63
Funzioni in PHP – 2
 Gli
argomenti possono essere passati
per valore o per riferimento
 Per
passare un argomento per
riferimento
è
sufficiente,
nella
definizione della funzione, far precedere
l’argomento da &
– La chiamata si effettua come al solito
 Se
il nome della funzione è preceduto
da &, allora la funzione restituirà un
valore per riferimento
Tecnologie di Sviluppo per il WEB
64
Funzioni in PHP – 3





Le variabili all’interno di una funzione sono
sempre locali
Per accedere alle variabili globali dobbiamo
dichiararle con la parola chiave global
Le funzioni non conservano memoria della
loro esecuzione a meno dell’uso di variabili
static
Una funzione definita in uno script è
disponibile ovunque in quello script
Per chiarezza è meglio definire le funzioni
all’inizio, ma non è necessario
Tecnologie di Sviluppo per il WEB
65
Funzioni in PHP – 4

In aggiunta alle usuali funzioni fornite dai
linguaggi di programmazione (manipolazione
di array, date e tempo, stringhe, funzioni
matematiche, …), PHP supporta un grande
numero di funzioni che lo collegano ad altri
tipo di software (molte di queste funzioni
richiedono una speciale installazione):
–
–
–
–
–
MySQL, MS SQL, Oracle 8
Shockwave Flash
PDF, XML
IMAP, POP3, NNTP
E tanti altri ancora…
Tecnologie di Sviluppo per il WEB
66
Funzioni con numero variabile di argomenti
 Esistono
tre funzioni per accedere al
numero dei parametri ed ai parametri
stessi di una funzione
da 0 a
– $array =
– $num =
– $valore =
func_get_args();
$num-1
func_num_args();
func_get_arg(indice);
 Il
risultato di uno qualsiasi di queste
funzioni non può essere usato
direttamente, ma deve sempre essere
associato prima ad una variabile
Tecnologie di Sviluppo per il WEB
67
Valori restituiti
 Passati
con l’istruzione return
 Per
far restituire più valori è sufficiente
restituire un array
function return_due() {
return array(“a”, 3);
}
Tecnologie di Sviluppo per il WEB
68
Uso di funzioni anonime (closure), come
assegnazioni a variabili.
È
possibile associare il nome di una
funzione ad una variabile e poi invocare
la funzione attraverso questa variabile
function max($a, $b) {
return ($a>$b ? $a : $b);
}
$massimo = “max”;
$massimo(3,4); //restituisce 4
Tecnologie di Sviluppo per il WEB
69
Ancora funzioni anonime
 Possiamo
crearle con
– create_function();
 Sintassi
$valoreRestituito =
create_function($stringaArgomenti,
$stringaCorpo);
 Esempio
$lambda = create_function(‘$a, $b’,
‘return(strlen($a) – strlen($b));’ );
Tecnologie di Sviluppo per il WEB
70