SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Metodo GET – 2
• Attenzione a
   – Caratteri speciali che non possono essere inseriti nelle
     URL (RFC 2396)
         • http://www.rfc-editor.org/rfc/rfc2396.txt
         • urlencode()
   – Caratteri che nelle URL assumono una funzione
     particolare (es. &)
         • htmlspecialchars()
         • htmlentities()
   – Tipi di dato non scalari (es. array)
         • devono essere preventivamente
           serializzati/deserializzati
         • serialize()/unserialize()
 A.A. 2005/2006              Basi di Dati e web         43




Metodo GET – 3

• urlencode. Restituisce una stringa in cui
   – tutti i caratteri non-alfanumerici sono sostituiti
     dal simbolo % seguito da due cifre
     esadecimali
         • Il carattere underscore (_) non viene sostituito
   – Gli spazi sono sostituiti dal simbolo plus (+)
• serialize. Restituisce una stringa
  contenente una rappresentazione byte-
  stream del parametro ricevuto (e.g.,
  oggetto, array)
• unserialize. Funzione inversa di serialize
 A.A. 2005/2006              Basi di Dati e web         44




Metodo GET – 4
• htmlspecialchars. Restituisce una stringa in cui
  i seguenti caratteri speciali di HTML sono
  sostituiti:
   – & (ampersand) -> &amp;
   – “” (double quote) -> &quot;
         (se ENT_NOQUOTES è specificato
   – ‘’ (single quote) -> &#039;
         (se ENT_QUOTES è specificato)
   – < (less than) -> &lt;
   – > (greater than) -> &gt;
• htmlentities. Analoga a htmlspecialchars,
  applica una sostituzione per tutti i caratteri di
  HTML
 A.A. 2005/2006              Basi di Dati e web         45




                                                                15
Metodo GET – 5

• Esempio
     <?php
        $data = “&/fd/”;
        echo quot;<a href=‘”;
        echo htmlspecialchars(quot;/index.php?id=23&data=quot;
                              . urlencode($data));
        echo “’>click</a>nquot;;
     ?>

   Produce
   <a href=‘/index.php?id=23&amp;data=%26%2Ffd%2F’>
     click</a>



 A.A. 2005/2006        Basi di Dati e web       46




Metodo POST – 1

• I parametri passati al PHP attraverso il
  metodo POST sono accessibili attraverso
  l’array $_POST
• E’ possibile passare array nominando i
  campi del form in maniera particolare
• Le select multiple devono essere passate
  come array



 A.A. 2005/2006        Basi di Dati e web       47




Metodo POST – 2
• Esempio
 <form action=“index.php” method=“POST”>
    Titolo:<input type=“text” name=“titolo” /><br />
    Genere:<select name=“genere[]” multiple=“yes”>
      <option value=“romanzo”>romanzo</option>
      <option value=“giallo”>giallo</option>
      <option value=“saggio”>saggio</option>
    </select><br />
    Pagg:<input type=“text” name=“dati[pagine]” />
    <br />
    Anno:<input type=“text” name=“dati[anno]” />
    <br />
    <input type=“submit”>
   </form>
 A.A. 2005/2006        Basi di Dati e web       48




                                                         16
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
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
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
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
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
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
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
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
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

Más contenido relacionado

La actualidad más candente

Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Kelyon Srl
 
Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)Danilo Dominici
 
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e httpsApache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e httpsFulvio Corno
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Kelyon Srl
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansDavide Nardone
 
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...KohaGruppoItaliano
 

La actualidad más candente (8)

SaaS con Symfony2
SaaS con Symfony2SaaS con Symfony2
SaaS con Symfony2
 
Apache HTTP Server
Apache HTTP ServerApache HTTP Server
Apache HTTP Server
 
Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015
 
Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)
 
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e httpsApache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...
Biblioteca Generale della Custodia di Terra Santa a Gerusalemme : Specifiche ...
 

Similar a Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P

Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1Gianfranco Fedele
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Serverguestbe916c
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Clientguestbe916c
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxGiovanni Cappellini
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Alessandro Loffredo
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]santi caltabiano
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileI.S.I.S. "Antonio Serra" - Napoli
 
Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftFrancesco Fullone
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
 
phpday 2006 - SEA case study
phpday 2006 - SEA case studyphpday 2006 - SEA case study
phpday 2006 - SEA case studyGaetano Giunta
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Stefano Bianchini
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataSynapta
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataDavide Allavena
 
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Simone Onofri
 

Similar a Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P (20)

Gianfrasoft Corso Di Php Parte 1
Gianfrasoft   Corso Di Php   Parte 1Gianfrasoft   Corso Di Php   Parte 1
Gianfrasoft Corso Di Php Parte 1
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
 
Pietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma MicrosoftPietro Brambati: PHP e la piattaforma Microsoft
Pietro Brambati: PHP e la piattaforma Microsoft
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
phpday 2006 - SEA case study
phpday 2006 - SEA case studyphpday 2006 - SEA case study
phpday 2006 - SEA case study
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowToLinux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
 
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
 

Más de guestbe916c

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M Lguestbe916c
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controlloguestbe916c
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q Lguestbe916c
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionaleguestbe916c
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioniguestbe916c
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q Lguestbe916c
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettualeguestbe916c
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettualeguestbe916c
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazioneguestbe916c
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logicaguestbe916c
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M Lguestbe916c
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Queryguestbe916c
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q Lguestbe916c
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioniguestbe916c
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logicaguestbe916c
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Datiguestbe916c
 
04 Progettazione Logica
04  Progettazione Logica04  Progettazione Logica
04 Progettazione Logicaguestbe916c
 
06 Normalizzazione
06  Normalizzazione06  Normalizzazione
06 Normalizzazioneguestbe916c
 

Más de guestbe916c (20)

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controllo
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q L
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionale
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioni
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettuale
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazione
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logica
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M L
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Query
 
Algebra
AlgebraAlgebra
Algebra
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q L
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
 
S Q L
S Q LS Q L
S Q L
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logica
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Dati
 
04 Progettazione Logica
04  Progettazione Logica04  Progettazione Logica
04 Progettazione Logica
 
06 Normalizzazione
06  Normalizzazione06  Normalizzazione
06 Normalizzazione
 

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) -> &amp; – “” (double quote) -> &quot; (se ENT_NOQUOTES è specificato – ‘’ (single quote) -> &#039; (se ENT_QUOTES è specificato) – < (less than) -> &lt; – > (greater than) -> &gt; • htmlentities. Analoga a htmlspecialchars, applica una sostituzione per tutti i caratteri di HTML A.A. 2005/2006 Basi di Dati e web 45 15
  • 16. Metodo GET – 5 • Esempio <?php $data = “&/fd/”; echo quot;<a href=‘”; echo htmlspecialchars(quot;/index.php?id=23&data=quot; . urlencode($data)); echo “’>click</a>nquot;; ?> Produce <a href=‘/index.php?id=23&amp;data=%26%2Ffd%2F’> click</a> A.A. 2005/2006 Basi di Dati e web 46 Metodo POST – 1 • I parametri passati al PHP attraverso il metodo POST sono accessibili attraverso l’array $_POST • E’ possibile passare array nominando i campi del form in maniera particolare • Le select multiple devono essere passate come array A.A. 2005/2006 Basi di Dati e web 47 Metodo POST – 2 • Esempio <form action=“index.php” method=“POST”> Titolo:<input type=“text” name=“titolo” /><br /> Genere:<select name=“genere[]” multiple=“yes”> <option value=“romanzo”>romanzo</option> <option value=“giallo”>giallo</option> <option value=“saggio”>saggio</option> </select><br /> Pagg:<input type=“text” name=“dati[pagine]” /> <br /> Anno:<input type=“text” name=“dati[anno]” /> <br /> <input type=“submit”> </form> A.A. 2005/2006 Basi di Dati e web 48 16
  • 17. 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