Programmazione Web PHP - Introduzione 1. PHP: Hypertext Preprocessor è un linguaggio di...

Post on 03-May-2015

215 views 0 download

transcript

Programmazione WebPHP - Introduzione

1

• PHP: Hypertext Preprocessor è un linguaggio di programmazione utilizzato prevalentemente per la programmazione di pagine Web• Alcune caratteristiche “tecniche”

• è un linguaggio di scripting• è interpretato (non compilato)• è server-side • è debolmente tipizzato • consente la programmazione Object Oriented

• Ed inoltre.. è Open Source

Cos’è il PHP?

2Programmazione Web - PHP: introduzione

• Il codice PHP viene inserito in una pagina (X)HTML (sul server)• Il codice PHP viene interpretato (sul server)• Viene generata una nuova pagina (X)HTML

Esecuzione di codice PHP

Form (X)HTML

action==“file.php”

Nuova pagina (X)HTML

Interpretazione“file.php”

MySQL

client server

3Programmazione Web - PHP: introduzione

1

Uno script PHP è salvato in un file di testo avente come estensione .php

Per esempio:

Salviamo il tutto in un file dal nome ciao.php all’interno della root del nostro Web server: la pagina sarà quindi accessibile all’indirizzo http://localhost/ciao.php

Preparare il tutto

4Programmazione Web - PHP: introduzione

<?php echo “Ciao mondo!”;?>

• Il codice PHP è racchiuso tra due tag <?php e ?>

• Le istruzioni PHP terminano con il punto e virgola

• I commenti hanno tre diversi stili

Struttura del codice PHP (I)

<?php ... codice PHP ...?>

echo 'Hello ';echo 'world!';

/* Autore: Devis Bianchini Ultima modifica: 15 aprile 2011*/echo '<p>Ordine gestito.</p>'; // Inizio stampa ordineecho '<p>Ordine gestito.</p>'; # Inizio stampa ordine

5Programmazione Web - PHP: introduzione

• Notazione alternativa

Struttura del codice PHP (II)

<script language=“php”> ... codice PHP ...</script>

6Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

7Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

8Programmazione Web - PHP: introduzione

Esempio: processa_modulo_ordine.php

9Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

10Programmazione Web - PHP: introduzione

Nome di una variabile (identificatore): Inizia con il simbolo $Formato da lettere, cifre e underscore ‘_’Lunghezza illimitataNon può iniziare con una cifraCase sensitive: $qviolino $Qviolino

 Una variabile viene creata nel momento in cui viene assegnata la prima volta

Variabili

$quantita = 0;$costo = 0.00;...$quantita = $qviolino;

11Programmazione Web - PHP: introduzione

Esistono altri due tipi “speciali”:• NULL: variabili cui non è assegnato un valore o sono state

assegnate con NULL• Resource: rappresentano risorse esterne (esempio:

connessione al database)

Tipi di variabiliTipo Natura del dato

integer Numeri interidouble Numeri realistring Stringhe di caratteriboolean Valori logici (true o false)array Vettori di dati

12Programmazione Web - PHP: introduzione

Tipi di variabili: array (I)

13Programmazione Web - PHP: introduzione

Tipi di variabili: array (II)

14Programmazione Web - PHP: introduzione

Le variabili sono molto “elastiche” nell’assegnamento del tipo di dati

Casting

Tipizzazione in PHP

$quantita = 0;$quantita = ‘Hello’;

$quantita = 0;$costo = (double)$quantita;

15Programmazione Web - PHP: introduzione

Mantengono un valore (come una variabile), che però non può essere cambiato

Costanti

define('PREZZO_FLAUTO', 2500);define('PREZZO_VIOLINO', 8000);define('PREZZO_OBOE', 5400);define('PREZZO_LIUTO', 11000);

define(<nome-costante>, <valore>)

16Programmazione Web - PHP: introduzione

PHP mette a disposizione un gran numero di variabili predefinite

Sono principalmente dedicate a descrivere il server su cui è in funzione, le richieste HTTP, variabili dell’ambiente di esecuzione

Alcune variabili predefinite possono essere dipendenti dalla piattaforma

Variabili predefinite

<?phpecho “<a href=\”http://”,

$_SERVER[“HTTP_HOST”], // nome del sito$_SERVER[“PHP_SELF”], // nome dello script“\”>Link a me stesso</a>\n”;

?>

17Programmazione Web - PHP: introduzione

È possibile inserire direttamente una variabile semplice in una stringa

Tuttavia, le stringhe tra apici semplici non applicano alcuna sostituzione:

Lavorare con le variabili

echo "$qoboe oboe <br />";

echo ‘$qoboe oboe <br />’;

2 oboe

$qoboe oboe

18Programmazione Web - PHP: introduzione

• L’accesso ai campi del modulo può avvenire mediante l’uso di array associativi:

• method="post“ $_POST['qviolino']• method="get“ $_GET['qviolino']

Accesso alle variabili del modulo (I)

'qflauto' 2

'qviolino' 3

'qoboe' 2

'qliuto' 4

19Programmazione Web - PHP: introduzione

• I valori dei campi del modulo possono essere copiati in altre variabili

Accesso alle variabili del modulo (II)

<?php $qflauto = $_POST['qflauto']; $qviolino = $_POST['qviolino']; $qoboe = $_POST['qoboe']; $qliuto = $_POST['qliuto'];?>

20Programmazione Web - PHP: introduzione

L’operatore . (punto) genera la concatenazione delle stringhe

Accesso alle variabili del modulo (III)

21Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

22Programmazione Web - PHP: introduzione

Operatori aritmetici

Operatore di concatenazione delle stringhe

Operatori (I)

$a = 'Strumenti Musicali ';$b = 'in Franciacorta';$titolo = $a . $b;

23Programmazione Web - PHP: introduzione

Operatore di assegnamento

Operatori di assegnamento combinato

Operatori (II)

$b = 6 + ($a = 5);

<variabile> = <espressione>

24Programmazione Web - PHP: introduzione

Operatore di incremento (++) e decremento (--)

Sono entrambi disponibili in due forme

• Prima della variabile

• Dopo la variabile

Operatori (III)

$a = 5;echo ++$a;

$a = 5;echo $a++;

prima $a viene incrementato (6) e poi visualizzato (6)

prima $a viene visualizzato (5) e poi Invìcrementato (6)

$a = 3;$b = 6;echo ($a--) * (++$b);

$a: 2$b: 7echo: 21

25Programmazione Web - PHP: introduzione

Operatore di confronto

Operatore identità: operandi uguali e dello stesso tipo

Operatori (IV)

$a = 0;$b = ‘0’;

$a == $b: true$a === $b: false

26Programmazione Web - PHP: introduzione

Operatori logici

Operatori (V)

27Programmazione Web - PHP: introduzione

Operatore condizionale (ternario)

Operatori (VI)

( <condizione> ? <valore se vera> : <valore se falsa> )

echo ($voto >= 18 ? 'promosso' : 'bocciato')

$max = ($a >= $b ? $a : $b)

$max3 = ($a >= $b && $a >= $c ? $a : ($b >= $c ? $b : $c))

echo 'Hai ordinato '.$qviolino.' violin‘ .($qviolino == 1 ? 'o' : 'i')

28Programmazione Web - PHP: introduzione

Alcune conversioni di tipo avvengono automaticamente in base agli operatori utilizzati nelle espressioni

La conversione non modifica il tipo degli operandi, che rimangono inalterati

Type juggling

<?php$a = “0”; // $a è la stringa “0”$a .= 2; // $a ora è una stringa che vale “02”$a += 2; // $a ora è l’intero 4$b = $a + 1.3; // $b vale 5.3, $a rimane inalterata

?>

29Programmazione Web - PHP: introduzione

Alcuni operatori sono tipici del linguaggio PHP

• controllo degli errori @: premettendo tale operatore ad un’espressione eventuali messaggi di errore non sono visualizzati

• esecuzione di script della shell ` (apice rovesciato o backtick): il testo tra apici rovesciati viene interpretato come comando della shell, eseguito ed eventualmente assegnato ad una variabile

Altri operatori

<?php$dir = @`ls -l`; // in Windows il comando è

// $dir = @`dir`?>?>

30Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

31Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

32Programmazione Web - PHP: introduzione

Per testare o modificare lo stato di una variabile si possono usare le seguenti funzioni:

• isset($var): true se $var esiste, altrimenti false• isset($a, $b, $c, ... ): true se tutte esistono,

altrimenti false• unset($var): elimina $var• empty($var): true se $var non esiste o ha valore zero,

altrimenti false

Funzioni di variabili

$qviolino = 3;echo 'echo1: ' . isset($qviolino) . '<br />'; // TRUEecho 'echo2: ' . isset($qtimpani) . '<br />'; // FALSEecho 'echo3: ' . empty($qviolino) . '<br />'; // FALSEecho 'echo4: ' . empty($qtimpani) . '<br />'; // TRUE

33Programmazione Web - PHP: introduzione

• is_boolean($a): verifica se la variabile contiene un valore booleano• is_integer($a): verifica se la variabile contiene un numero intero• is_float($a), is_double($a), is_array($a), is_resource($a)• is_null($a): verifica se la variabile contiene il valore null• is_numeric($a): verifica se il contenuto della variabile è compatibile con un valore numerico (ossia se è un numero o una stringa convertibile in numero)• gettype($a): restituisce il nome del tipo della variabile sotto forma di stringa

Funzioni di accesso al tipo

34Programmazione Web - PHP: introduzione

Il blocco <istruzioni> viene eseguito solo se <condizione> è vera

L’istruzione if

if($quantita_totale == 0) echo 'Non hai ordinato alcun articolo! <br />';

if(<condizione>) <istruzioni>

if($costo_totale >= 30000){ echo 'Hai diritto ad uno sconto del 10% <br />';}

35Programmazione Web - PHP: introduzione

Il blocco <istruzioni> viene eseguito solo se la condizione del precedente if è falsa

L’istruzione else

if($quantita_totale == 0) echo "Non hai ordinato alcun articolo! <br />";else{ echo 'Ecco la lista degli articoli: <br />'; echo '<ul>'; echo "<li>$qflauto flauti</li>"; echo "<li>$qviolino violini</li>"; echo "<li>$qoboe oboe</li>"; echo "<li>$qliuto liuti</li>"; echo "</ul>";}

else <istruzioni>

36Programmazione Web - PHP: introduzione

È usato quando si hanno più di due rami decisionali: 

Viene eseguito solo il blocco di istruzioni corrispondente alla prima condizione veraSe nessuna condizione vera, viene eseguito il blocco della else (se specificata)

L’istruzione elseif

if($costo_totale <= 10000) $sconto = 0.0;elseif($costo_totale > 10000 && $costo_totale <= 20000) $sconto = 0.10;elseif($costo_totale > 20000 && $costo_totale <= 40000) $sconto = 0.20;elseif($costo_totale > 40000 && $costo_totale <= 80000) $sconto = 0.25;else $sconto = 0.30;

elseif <condizione>) <istruzioni>

37Programmazione Web - PHP: introduzione

Il costrutto switch permette di diversificare l’operato del programma al valore dell’espressione testata

L’istruzione switchswitch (<condizione>) {

case <valore1>: <codice> break;case <valore2>: <codice> break;....default: <codice>; break;

}

switch ($nome) { case 'Luca': case 'Giorgio': case 'Franco':

echo "Ciao, vecchio amico!"; break; case 'Mario': echo "Ciao, Mario!"; break; default: print "Benvenuto, chiunque tu sia";

}

38Programmazione Web - PHP: introduzione

Sono utilizzate quando è necessario eseguire più volte lo stesso blocco di istruzioni 

Iterazioni

39Programmazione Web - PHP: introduzione

Sono utilizzate quando è necessario eseguire più volte lo stesso blocco di istruzioni 

Iterazioni

40Programmazione Web - PHP: introduzione

Il blocco <istruzioni> viene eseguito fino a quando <condizione> è vera

Ciclo whilewhile(<condizione>) <istruzioni>

41Programmazione Web - PHP: introduzione

Il significato è esprimibile in termini di ciclo while come segue

Ciclo forfor(<istruzione1>; <condizione>; <istruzione2>) <istruzioni>

<istruzione1>;while(<condizione>) { <istruzioni> <istruzione2>;}

42Programmazione Web - PHP: introduzione

Il significato è esprimibile in termini di ciclo while come segue

Ciclo forfor(<istruzione1>; <condizione>; <istruzione2>) <istruzioni>

<istruzione1>;while(<condizione>) { <istruzioni> <istruzione2>;}

43Programmazione Web - PHP: introduzione

È simile al ciclo while, ma <condizione> viene testata dopo l’esecuzione di <istruzioni>

Ciclo do..whiledo <istruzioni>while (<condizione>)

44Programmazione Web - PHP: introduzione

Il ciclo si ripete tante volte quanti sono gli elementi dell’array e all’interno del ciclo ogni volta è disponibile, nella variabile $valore, il valore dell’elemento corrispondente all’iterazione

Questa versione è particolarmente utile per gli array associativi; oltre al valore è presente anche la chiave dell’elemento, presente nella variabile $chiave

Ciclo foreachforeach(array as $valore)

istr

45Programmazione Web - PHP: introduzione

foreach(array as $chiave=>$valore)istr

Funzioni

46Programmazione Web - PHP: introduzione

function nome_funzione ($arg1, $arg2) { // codice della funzione (corpo)

// l’istruzione return serve per restituire un valore// come risultato ed è opzionalereturn <risultato>;

}

Funzioni con argomenti di default

47Programmazione Web - PHP: introduzione

function nome_funzione ($arg1, $arg2=“default”) { // codice della funzione (corpo)

return <risultato>;}

. . .

$ris1 = nome_funzione(“primo”,”secondo”); // senza l’uso del // default$ris2 = nome_funzione(“primo”); // con l’uso del default

• Argomento della funzione date() = stringa che specifica il formato:

H = ore (in formato 24-ore)i= minutij = giorno del meseS = suffisso ordinale (tipicamente, th)F = nome del mese

Esempio: gestione di un ordine<body> <h1>Strumenti Musicali in Franciacorta</h1> <h2>Gestione Ordine<h2> <?php echo '<p>Ordine gestito alle ore '; echo date("H:i, jS F"); echo '. Grazie per aver scelto i nostri prodotti.</p>'; ?></body>

48Programmazione Web - PHP: introduzione

Esempio: gestione di un ordine

49Programmazione Web - PHP: introduzione

La visibilità (o scope) di una variabile $v è la porzione del codice in cui è visibile $v:

• Le variabili superglobali sono visibili ovunque nello script (es., $_GET, $_POST, $_SERVER)

• Le costanti sono visibili ovunque nello script• Le variabili globali sono visibili ovunque nello script, tranne

che nelle funzioni• Le variabili dichiarate globali nelle funzioni si riferiscono alle

omonime variabili dichiarate globali fuori delle funzioni• Le variabili dichiarate statiche in una funzione sono visibili

solo nella funzione ma mantengono il loro valore tra una chiamata e l’altra della funzione

• Le variabili locali create in una funzione sono visibili solo nelle funzione e scompaiono al termine della esecuzione della funzione

Visibilità

50Programmazione Web - PHP: introduzione

Visibilità: esempio

51Programmazione Web - PHP: introduzione

$a = 1;function nome_funzione (){

global $a; // senza questa riga la funzione non stampa// niente

echo $a;}

. . .

nome_funzione();

• Nel linguaggio PHP il concetto di classe è quello tradizionale dei linguaggi di programmazione ad oggetti

Classi e oggetti

52Programmazione Web - PHP: introduzione

53

Esempio

• Le variabili di stato della classe saranno disponibili a tutti i metodi della classe stessa tramite l’uso del prefisso speciale $this->

Programmazione Web - PHP: introduzione

• Una volta definita la struttura della classe, è possibile istanziare uno o più oggetti di quel tipo

• lasciando i valori di default• specificando nuovi parametri al momento

dell’istanziazione

Istanziazione

54Programmazione Web - PHP: introduzione

• Dopo aver istanziato la classe, i metodi della classe possono essere invocati per andare a modificare le variabili di stato della classe stessa

• le invocazioni dei metodi su una istanza sono indipendenti dalle invocazioni di metodi su istanze diverse

Invocazione dei metodi di una classe

55Programmazione Web - PHP: introduzione

• La gestione delle classi e della programmazione ad oggetti è stata enormemente potenziata nell’ultima versione di PHP (PHP 5)

• sono stati introdotti i modificatori di visibilità private, public e protected, su cui valgono le comuni regole della programmazione a oggetti

• sono stati introdotti i metodi _construct (nome univoco per il costruttore) e _destruct (nome univoco metodo distruttore)

• è possibile passare gli oggetti per riferimento e non per valore

PHP 5 e oggetti (I)

56Programmazione Web - PHP: introduzione

• In PHP 5 è stato anche potenziato il meccanismo dell’ereditarietà (parola chiave extends)

• sono state introdotte le interfacce• è stato introdotto l’operatore instance of• è possibile definire metodi e classi come final• è stato introdotto l’uso di static per definire

proprietà e metodi statici

PHP 5 e oggetti (II)

57Programmazione Web - PHP: introduzione

• PHP 5 ha introdotto un nome standardizzato per i costruttori, _construct

• se la classe viene rinominata, non è necessario modificare anche il nome del suo costruttore

• Una grossa novità in PHP 5 è l’introduzione del metodo distruttore, _destruct()

• utile per operazioni di pulizia, come l’eliminazione di file temporanei o la chiusura di connessioni a database (garbage collection)

• la garbage collection avviene nel momento in cui viene eliminato l’ultimo riferimento all’oggetto

Costruttori e distruttori

58Programmazione Web - PHP: introduzione

Esempio

59Programmazione Web - PHP: introduzione

• Grazie all’uso delle interfacce, viene superato il vincolo dell’ereditarietà da una singola classe; infatti una classe può implementare più interfacce

Interfacce

60Programmazione Web - PHP: introduzione

• Viene utilizzato per verificare la classe di un oggetto

L’operatore instance of

61Programmazione Web - PHP: introduzione

• Se un metodo è dichiarato final, non può essere effettuato per esso l’overload dalle classi che lo ereditano

• Se una classe è dichiarata come final, non può essere sottoposta al meccanismo dell’ereditarietà

Metodi e classi final

62Programmazione Web - PHP: introduzione

Metodi e proprietà static

63Programmazione Web - PHP: introduzione

• L’inclusione di codice PHP in altri file avviene tramite la funzione require(nome_file)

• Per evitare di includere un file più volte, si usa require_once

Riuso del codice PHP (I)

64

inclusione.php

main.php

Programmazione Web - PHP: introduzione

Riuso del codice PHP (I)

65Programmazione Web - PHP: introduzione

Riuso del codice PHP (II)

66

inclusione.php

main.php

header.php

footer.php

Programmazione Web - PHP: introduzione

• Nelle ultime versioni del PHP non viene fatta nessuna distinzione tra l’uso di require e di include, entrambe le funzioni servono per includere file esterni e hanno la medesima sintassi• Le due funzioni in realtà si comportano in modo diverso solo nel caso in cui ci siano degli errori di inclusione del file

• include(nome_file) restituisce un warning, mentre lo script prosegue

• require(nome_file) segnala l’errore e blocca lo script

• entrambe le funzioni hanno l’estensione _once per evitare il caricamento multiplo dello stesso file

require vs include

67Programmazione Web - PHP: introduzione

• Se definita, la funzione _autoload viene automaticamente chiamata qualora si stia cercando di istanziare una classe non ancora definita

La funzione _autoload

68Programmazione Web - PHP: introduzione

Esempi: riuso del codice in PHP

Programmazione Web - PHP: introduzione

70

Definizione di paragrafi (p)

Funzione che genera il codice XHTML di un paragrafo (tag <p>)

Programmazione Web - PHP: introduzione

71

Definizione di intestazioni (h)

Funzione che genera il codice XHTML di una intestazione (tag <h*>, valore di default pari a 1)

Programmazione Web - PHP: introduzione

72

Definizione di interruzioni di riga (br)

Funzione che genera il codice XHTML di un certo numero di interruzioni di riga (tag <br>, valore di default pari a 1)

Programmazione Web - PHP: introduzione

73

Definizione di link (a)

Funzione che genera il codice XHTML di un link ipertestuale (tag <a>)

Programmazione Web - PHP: introduzione

74

Definizione di link (img)

Funzione che genera il codice XHTML di una immagine (tag <img>)

Programmazione Web - PHP: introduzione

75

Definizione di liste non ordinate (ul)

Funzione che genera il codice XHTML di una lista non ordinata (tag <ul> e <li>)

Analogo per le liste ordinate (tag <ol>)

Programmazione Web - PHP: introduzione

76

Definizione di moduli (form)

Funzione che genera il codice XHTML di un modulo (tag <form>)

Programmazione Web - PHP: introduzione

77

Definizione di campi in un modulo

Funzione che genera il codice XHTML di un pulsante di invio (submit)

Analogo per gli altri tipi di campi

Programmazione Web - PHP: introduzione

78

Definizione di tabelle (table)

Funzione che genera il codice XHTML di una tabella (tag <table>)

Programmazione Web - PHP: introduzione

79

Generazione veloce della pagina XHTML

Programmazione Web - PHP: introduzione

80

Esempio

Programmazione Web - PHP: introduzione

81

Esempio

Programmazione Web - PHP: introduzione

• Gestione delle eccezioni con try/throw/catch

Altre novità in PHP 5

82Programmazione Web - PHP: introduzione