Server side: la componente - PHP - Unito
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
aa 2019/2020 la componente server‐side: introduzione a PHP Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 1 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 2 1
aa 2019/2020 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 3 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 4 2
aa 2019/2020 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 5 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 6 3
aa 2019/2020 Note sparse su PHP ‐ I PHP... • è un linguaggio di programmazione per il web nato nel 1995 • è utilizzato da più dell'80% dei siti web nel mondo secondo (Zimuel 2017), 83,5% secondo w3techs.com (luglio 2018), tra cui: Wordpress, Drupal, Joomla!, Magento, WikiMedia • è interpretato (da un interprete PHP) • è server‐side (cioè interpretato ed eseguito sul server) • è supportato da tutti i principali web server (Apache, Nginx, IIS, ...) e può essere eseguito anche da linea di comando (utilizzando una speciale versione dell'interprete chiamata CLI – Command Line Interface) • a fianco dell'interprete ci sono moltissime estensioni (moduli) con funzionalità specifiche, per es. accesso a database ( è possibile implementare nuovi moduli con funzionalità specifiche), utilizzando la Zen API (in C) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 7 Note sparse su PHP ‐ II • nella versione 7 il motore è stato completamente re‐ implementato, migliornadone significativamente le prestazioni Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 8 4
aa 2019/2020 Note sparse su PHP ‐ III • esistono moltissimi framework di sviluppo (open source), x es: Zend Framework, Symfony, Laravel, CodeIgniter, Yii, CakePHP, Phalcon, Slim, ... (un articolo comparativo sui framework x PHP: www.intraweb.it/confronto‐migliori‐framework‐mvc‐php‐2017) • la memoria viene rilasciata a fine esecuzione (tipicamente, dopo una HTTP request/response) – no garbage collection • è debolmente tipato (anche se è stata introdotta, nella v. 7, la possibilità di dichiarare i tipi degli input/output delle funzioni) e le variabili non devono essere dichiarate • il deploy di una web app è semplicissimo: basta copiare tutti i file (pagine, immagini, css, ecc.) nella document root del server! • PHP = PHP Hypertext Preprocessor il sorgente è contenuto direttamente nella pagina web... Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 9 Come funziona PHP ‐ I Applicazione web scritta in PHP = insieme di "pagine web", cioè file di testo, con estensione .php, che contengono: – Codice HTML (+ eventualmente Javascript client‐side) – Codice PHP = programma (script) server‐side Esempio: [h] PHP: esempio HTML: interpretato dal browser [p]
aa 2019/2020 Come funziona PHP ‐ II Cosa succede quando il browser invia una HTTP request al server basata su un URL del tipo: http://www.di.unito.it/dida.php? • Il Web Server si accorge, grazie all'estensione del file indicato nell'URL, che la risorsa richiesta è una pagina PHP (dida.php) gira l'HTTP request all'interprete PHP • l'interprete PHP interpreta (ed esegue) gli script [p] contenuti nella pagina indicata nell'HTTP request; tipicamente, alcune istruzioni PHP gli diranno di: – leggere i dati (parametri) contenuti nell'HTTP request; x es: $id = $_GET["username"]; opp $id = $_POST["username"]; – connettersi ad un database (per leggere o scrivere dati); x es: $r = $db->query("SELECT * from libri WHERE titolo = '$tit'"); • L'esecuzione dello script PHP produce un risultato, tipicamente del testo o del codice HTML, che viene inserito nella pagina al posto dello script Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 11 Come funziona PHP ‐ III • La pagina risultante, composta dall'HTML originario [h] + il risultato dell'esecuzione dello script, viene inviata al browser (nel body dell'HTTP response) • Tipicamente: sistema web server DBMS interprete script operativo server‐side Linux L. Apache A. MySQL/MariaDB M. PHP P. Linux (www.linuxfoundation.org) tutte Apache (www.apache.org) tecnologie MySQL (www.mysql.com) o MariaDB (mariadb.org) Open PHP (www.php.net) Source NB: sono possibili combinazioni diverse... per es: Windows + Apache + MySQL/MariaDB + PHP = W.A.M.P. Mac OS + Apache + MySQL/MariaDB + PHP = M.A.M.P. Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 12 6
aa 2019/2020 Come funziona PHP ‐ IV nome = maria client-side eta = 18-25 dida.php Come ti ... HTTP chiami? maria request Quanti da 18 a 25 server-side anni hai? Web … invia Server Ciao Maria! HTTP Ho inserito i tuoi dati... response ... interprete PHP INSERT INTO utenti Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 13 PHP: strumenti, XAMPP ‐ I XAMPP = pacchetto multi‐piattaforma (X = qualunque S.O.) contenente Apache, MySQL/MariaDB, PHP e Perl [www.apachefriends.org] Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 14 7
aa 2019/2020 PHP: strumenti, XAMPP ‐ II • Consiglio: installare direttamente sotto C:/ (NON sotto C:/Programmi/) • Durante l’installazione è possibile che vi chieda se volete installare i vari server come servizi (avvio automatico): a vostra scelta (consiglio: NO) • Dal pannello di controllo potete avviare e fermare i vari server (per noi sono rilevanti Apache e MySql Server) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 15 PHP: strumenti, XAMPP ‐ III Note • La configurazione di default di XAMPP va bene in fase di sviluppo, ma non è abbastanza sicura in fase di produzione • Potete modificare la configurazione modificando i seguenti file (fatelo con cautela!): – Apache: C:\xampp\apache\conf\httpd.conf – PHP: C:\xampp\php\php.ini – MySQL Server: C:\xampp\mysql\bin\my.ini – phpMyAdmin: C:\xampp\phpMyAdmin\config.inc.php NB: sono file di testo: apriteli con Blocco Note o simili (non con Word!) • Potete accedere allo strumento di amministrazione di Apache, cliccando su Admin (di fianco ad Apache), nel pannello di controllo… Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 16 8
aa 2019/2020 PHP: strumenti, XAMPP ‐ IV • dal browser collegandovi a http://localhost/ potete accedere alla dashboard di XAMPP potete verificare se l'interprete PHP funziona cliccando su PHPInfo Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 17 PHP: strumenti, XAMPP ‐ V • document root di Apache = C:\xampp\htdocs\ (= cartella dove mettete le pagine php, html, le immagini, ecc...) NB: sotto la document root potete creare nuove cartelle, x es: C:\xampp\htdocs\corsoTecWeb • Per visualizzare con il browser le risorse contenute nella document root, vi connettete a: http://localhost/ (o http://localhost/ corsoTecWeb) NB: il "mapping" tra http://localhost/ e document root (C:\xampp\htdocs\) può essere modificato assegnando un diverso valore alla variabile DocumentRoot, nel file di configurazione del Web Server (httpd.conf) • La configurazione di default di XAMPP prevede che, connettendosi a http://localhost/, vengano automaticamente visualizzate le pagine index.html o index.php NB: si possono aggiungere altre "home page di default" (es. home.php) nel file httpd.conf, x es: DirectoryIndex index.php index.html home.php ... Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 18 9
aa 2019/2020 PHP: strumenti, editor ‐ I Due possibili editor per PHP e compagni: Notepad++ [notepad-plus-plus.org] Notepad++ is a free (as in "free speech" and also as in "free beer") source code editor [...] that supports several languages. Running in the MS Windows environment, its use is governed by GPL License. Based on the powerful editing component Scintilla, Notepad++ is written in C++ and uses pure Win32 API and STL which ensures a higher execution speed and smaller program size. jEdit [www.jedit.org] jEdit is a mature programmer's text editor [...] it is released as free software with full source code, provided under the terms of the GPL. [...] Written in Java, so it runs on Mac OS X, OS/2, Unix, VMS and Windows. Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 19 PHP: strumenti, framework e IDE ‐ IV Una nota... [rif. Zimuel, 2017] Per creare e manutenere un'applicazione professionale con PHP, occorre badare a moltissimi aspetti (che NON possiamo affrontare in questo corso), x es: – utilizzare un Framework! [vedremo solo un esempio…] – gestire con molta attenzione la sicurezza – pianificare un testing accurato (rif. PHPUnit testing framework) – attivare log & monitoring (rif. error_log(), monolog logging library) – gestire le dipendenze da librerie esterne, soprattutto in fase di manutenzione (rif. Composer tool for dependency management) – pianificare con cura il deploy in produzione [vedi: www.zimuel.it/slides/unito2017#/] L'obiettivo di questo corso è quello di gettare le basi per poi essere in grado di affrontare anche questi aspetti :‐) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 20 10
aa 2019/2020 PHP: script tag ‐ I Script Style: script... XML Style: Short style: attivato nel file php.ini: short_open_tag = On NB: • PHP è case‐sensitive: pippo Pippo PIPPO pipPo (ma NON i nomi delle classi, né quelli delle funzioni...!) • le istruzioni devono terminare con punto‐e‐virgola ; Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 21 PHP: HTTP response ‐ I HTTP request Web Server browser HTTP response print e echo scrivono nel body dell'oggetto HTTP response NOTA: print e echo sono equivalenti: l'unica differenza è che echo funziona anche con più stringhe (separate da una virgola: echo "pippo", "pluto", ...) NB: Non sono vere e proprie funzioni, per questo le parentesi non sono obbligatorie, ma possono essere usate: print ("Hello!"); echo("Ciao!"); Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 22 11
aa 2019/2020 TRY YOURSELF! • Installate XAMPP • Provate XAMPP (Apache e l’interprete PHP) avviate Apache (e MySQL/MariaDB) create una pagina HTML (es. mypage.html) con dentro un semplice codice HTML e mettetela nella document root di Apache aprite il un browser connettetevi al Web Server e chiedetegli quella pagina (URL): http://localhost/mypage.html create una pagina PHP (es. mypage.php) con dentro un semplice script PHP, per es: ): mettetela nella document root di Apache aprite il un browser connettetevi al Web Server e chiedetegli quella pagina (URL): http://localhost/mypage.php Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 23 PHP: tipi ‐ I • PHP è un linguaggio "debolmente tipato" • Tipi di base in PHP: int: interi; es: 3, ‐5 float: decimali (reali); es: 7.67 boolean: valori booleani; es: TRUE (1), FALSE (0) string: sequenze di caratteri; es: "pippo", 'CV_45ie' array: liste (con indice) object: oggetti [come in Java]; es: data = new Date(); NULL: "il Nulla" ;‐) [come in Java] • è possibile convertire il tipo (type casting); es: (int) 2.71 2 • PHP converte automaticamente i tipi durante l'esecuzione (quando possibile) • la funzione gettype restituisce il tipo (in forma di stringa); la funzione var_dump restituisce il tipo e il valore; es: gettype($pippo) float var_dump($pippo) float(2.71) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 24 12
aa 2019/2020 PHP: variabili e assegnamenti ‐ I • I nomi delle variabili sono preceduti da $: $pippo • Gli assegnamenti si fanno con =, per es: $pippo = 5; Altri operatori di assegnamento: +=, -=, *=, /=, %=, **=, .= • Le varibili (compreso il tipo) vengono dichiarate implicitamente al primo assegnamento: $pippo = 5; pippo è di tipo int • Le regole di visibilità sono le solite, all'interno della pagina (indipendentemente dai blocchi PHP ) • $pippo = $pluto il valore di pluto viene copiato in pippo (e le due variabili sono indipendenti) $pippo = &$pluto viene creato un nuovo puntatore a pluto se modifico il valore di pluto, viene modificato anche il valore di pippo (pippo è una reference variable, praticamente un alias di pluto) • Posso anche definire delle costanti, che poi funzionano come delle variabili globali (sempre accessibili): define('MY_CONST', "Hello"); Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 25 PHP: operatori aritmetici e stringhe ‐ I Operatori aritmetici: +, -, *, /, % (modulo, resto), ** (esponente, es: 42 4**2) ++, -- (NB: $i++ vs ++$i !!) Concatenazione di stringhe: $p = "pippo"; "Buongiorno" . $p "Buongiorno pippo" Manipolazione di stringhe: $s = "pippo e topolino"; strlen($s) 16 $s[0] p $s[5] (spazio bianco) $s[15] o PHP ha moltissime funzioni predefinite per la manipolazione di stringhe... dategli un'occhiata! [php.net/strings] Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 26 13
aa 2019/2020 PHP: operatori aritmetici e stringhe ‐ II Interpreted string: per facilitar la vita al programmatore ed evitare l'uso pesante della concatenazione...
aa 2019/2020 PHP: commenti e operatori di confronto ‐ I Commenti: // commento su una riga # commento su una riga /* commento su + righe commento su + righe */ Operatori di confronto: > maggiore == uguale (numeri e stringhe) >= maggiore o uguale ignora i tipi (2 == "2" T) < minore != opp diverso (numeri e stringhe) ignora i tipi (2 != "2" F)
aa 2019/2020 PHP: condizionali e cicli ‐ I if (condizione1) { se la condizione1 è vera esegui sequenza_di_azioni_1 } la sequenza_di_azioni_1 elseif (condizione2) { altrimenti sequenza_di_azioni_2 se la condizione2 è vera esegui } la sequenza_di_azioni_2 ... … else { altrimenti esegui sequenza_di_azioni_n la sequenza_di_azioni_n } for (inizio; test; incremento) { sequenza_di_azioni } esegui la sequenza_di_azioni a partire da inizio, finché test è vero, avanzando ad ogni passo di quanto è indicato da incremento Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 31 PHP: condizionali e cicli ‐ II while (condizione) { finché la condizione è vera sequenza_di_azioni esegui la sequenza_di_azioni } (quando la condizione è falsa, la sequenza_di_azioni non viene eseguita) do { esegui la sequenza_di_azioni sequenza_di_azioni finché la condizione è vera } while (condizione) (quando la condizione è falsa, la sequenza_di_azioni viene comunque eseguita una volta) NB le strutture di controllo (condizionali e cicli) in PHP NON introducono uno scope per le variabili! Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 32 16
aa 2019/2020 PHP: condizionali e cicli ‐ III PHP ha anche una sintassi alternativa per le strutture di controllo (condizionali e cicli): if (condizione1): sequenza_di_azioni_1 elseif (condizione2): sequenza_di_azioni_2 ... else: sequenza_di_azioni_n endif; for (inizio; test; incremento): sequenza_di_azioni endfor; while (condizione): sequenza_di_azioni endwhile; Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 33 PHP: condizionali e cicli ‐ IV PHP ha anche un operatore ternario (una sorta di condizionale compatto): (expr1) ? (expr2) : (expr3); se expr1 è vera restituisci expr2, altrimenti restituisci expr3 Per es: $ris = ($count>0) ? "Length=".$count : "Empty!"; ... e un coalesce operator (ancora più compattto): (expr1) ?? (expr2) ... ?? (expr3); se expr1 è vera restituiscila, se expr2 è vera restituiscila, ... altrimenti restituisci expr3 Per es: $ris = $count ?? "count undefined"; Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 34 17
aa 2019/2020 PHP: condizionali e cicli ‐ V switch(variable) { se la variablile ha valore val1, case val1: esegui la sequenza_di_azioni_1 sequenza_di_azioni_1 break; se la variablile ha valore val2, case val2: esegui la sequenza_di_azioni_2 sequenza_di_azioni_2 … break; altrimenti esegui ... la sequenza_di_azioni_d default: sequenza_di_azioni_d break; } Provate a usare lo switch con lo spaceship operator... Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 35 VEDI es‐funz.php PHP: funzioni ‐ I Definizione della funzione: function calcolaPrezzo( $prezzo_intero, $sconto ) { $risultato = 0.0; $risultato = $prezzo_intero-($prezzo_intero*$sconto)/100; return $risultato; } parametri "formali" return statement: per definire NB: in PHP non dichiaro il risultato della funzione esplicitamente il tipo Invocazione della funzione: Prezzo scontato: Prezzo scontato: 225 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 36 18
aa 2019/2020 VEDI es‐funz.php PHP: funzioni ‐ II E' anche possibile specificare parametri opzionali (a cui si assegna un valore che viene usato se non viene specificato alcun parametro attuale): function calcolaPrezzo($prezzo_intero, $sconto = 0.0 ) { $risultato = 0,0; $risultato = $prezzo_intero-($prezzo_intero*$sconto)/100; return $risultato; parametro con } valore di default Invocazione: (NB sempre x ultimi!) Prezzo scontato: Prezzo scontato: 350 Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 37 PHP: funzioni ‐ III In PHP 7 è stato introdotta la possibilità di dichiarare i tipi dei parametri e del valore di ritorno (rif. php.net/manual e Zimuel, 2017): function esempio(string $a, int $b): bool { $ris = false; $ris = ($a == $b) ? true : false; return $ris; } Tipi disponibili: php.net/manual/en/language.types.php Da PHP 7 è possibile abilitare lo strict mode: • in strict mode è necessario dichiarare i tipi • l'interprete effettua il type‐checking e in caso di mismatch, viene lanciata un'eccezione di tipo TypeError (tranne l'uso di un int al posto di un float, che va comunque bene!) • per attivare strict mode: inserire all'inizio (NB assoluto!) del file declare(strict_types=1); Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 38 19
aa 2019/2020 VEDI es‐funz.php PHP: funzioni ‐ IV In PHP è possibile invocare una funzione usando una variabile... $calcolo = "calcolaPrezzo"; $prezzo_iniziale = 350.0; $ris = $calcolo($prezzo_iniziale); In PHP 7 è stato introdotto il concetto di nullable (rif. Zimuel, 2017): Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 39 PHP: funzioni ‐ V • normalmente, in PHP, i parametri sono passati per valore, ma è possibile passarli per riferimento (con &): function ingrandisci(&$num) { $num = $num*2; } $x = 5; ingrandisci($x); print $x; 10 (avessi passato $num per valore 5) NB1 usate il passaggio per riferimento con molta parsimonia!! NB2 gli oggetti [che vedremo...] fanno eccezione (sono passati per riferimento) • le variabili dichiarate in una funzione hanno visibilità locale NB in PHP i costrutti come if e cicli NON danno origine a scope per le variabili • per accedere a una variabile globale da dentro una funzione: $nomeCompleto = "Eastwood"; #var globale function completaNome() { global $nomeCompleto; $nome = "Clint"; #var locale $nomeCompleto = "$nome $nomeCompleto" print $nomeCompleto; } Clint Eastwood NB fatelo con molta parsimonia!! Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 40 20
aa 2019/2020 PHP: expression block ‐ I Al posto di The answer to the ultimate question of Life, the Universe and is possiamo usare gli expression block, x es: The answer to the ultimate question of Life, the Universe and is Non dimenticate l'= nell'expression block!! Controllate che sia abilitato in php.ini (short_open_tag setting)! Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 41 PHP: array ‐ I • una lista è una sequenza ordinata di elementi contenuto pippo pluto minni pippo posizione (indice/key) 0 1 2 3 • a differenza degli insiemi, le liste possono contenere duplicati • per rappresentare una lista in PHP possiamo usare un array (indexed array) • l'indice del primo elemento è sempre 0 • quando inserisco un elemento, l'array... non "fa spazio" se inserisco etaBeta all'indice 2, l'array risultante sarà: • NB gli array sono oggetti, pippo pluto etaBeta pippo quindi vengono passati 0 2 3 1 per riferimento!! • NB possono contenere elementi di tipo diverso... :‐( Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 42 21
aa 2019/2020 VEDI es‐array.php PHP: array ‐ II • Per creare un array (per inizializzare una variabile di tipo array): $lista = array(); $lista = array("pippo", "pluto", "minni"); oppure $lista = ["pippo", "pluto", "minni"]; • Per scrivere/leggere un elemento in posizione i $lista[i] = "etaBeta"; $elem = $lista[i]; • Per aggiugere un elemento in fondo all'array: array_push($lista, "etaBeta"); $lista[] = "etaBeta"; NB gli elem. restanti • Per eliminare un elemento dall'array: mantengono i loro indici! unset($lista[i]); • Per sapere quanti elementi ha un array: $lungh = count($lista); • Per stampare il contenuto (tutti gli elementi) di un array: print_r($lista); Array ( [0] => pippo [1] => pluto [2] => minni ) • Per sapere se un array contiene un certo elemento: in_array("pippo", $lista); Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 43 VEDI es‐array.php PHP: array ‐ III Cicli sugli array: for e foreach nuova variabile che viene automaticamente lista da scorrere foreach ( array as elem ) { riempita via via con elementi successivi della lista sequenza_di_azioni } • Leggo gli elementi dell'array con un for: • pippo • pluto • minni • Leggo gli elementi dell'array con un foreach: • pippo • pluto • minni Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 44 22
aa 2019/2020 VEDI es‐array.php PHP: array ‐ IV • Modifico gli elementi dell'array con un foreach e successivamente li ri‐leggo, sempre con un foreach :‐( • pluto • minni perché nella var $pers c'è una copia dell'elemento corrente! • Modifico gli elementi dell'array con un for e successivamente li ri‐leggo con un foreach :‐) • hasta siempre pippo • hasta siempre pluto • hasta siempre minni perché gli array sono sempre Goy ‐ a.a. 2019/2020 passati per riferimento! Tecnologie Web: approcci avanzati 45 VEDI es‐array.php PHP: array ‐ V In PHP è possibile anche accedere agli elementi chiamandoli "per nome", anziché usare la posizione, creando un array associativo • Per crearlo: $cliente = array( "nome" => "anna", molto "cognome " => "goy", ...); importanti in PHP! • Per scrivere/leggere singoli elementi: $cliente["nome"] = "anna"; $n = $cliente["nome"]; chiavi valori • Per aggiugere un elemento (una coppia): $cliente["tel"] = 123456; • Per sapere se una chiave esiste: nome anna array_key_exists("nome", $cliente); cognome goy • Per eliminare un elemento : ... ... unset($cliente["tel"]); NB le chiavi possono essere stringhe, interi, ... Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 46 23
aa 2019/2020 VEDI es‐array.php PHP: array ‐ VI Cicli sugli array associativi: for e foreach foreach (array as key => val ) { sequenza_di_azioni } • Leggo gli elementi dell'array con un foreach: = • nome = anna • cognome= goy • ... PHP ha moltissime funzioni predefinite per la manipolazione di array... dategli un'occhiata! [php.net/arrays] NB potete costruire array multidimensionali (array di array di array...) $clienti = array( "goy" => array("anna", 123456, "goy@mail.it"), "gena" => array("cristina", 987654, "gen@mail.it") ); Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 47 TRY YOURSELF! • "giocate" un po' con es‐array.php... – x es. provate a complicare stampare cose diverse per personaggi diversi (es: se il personaggio è Paperone, scrivete "avaro", se Gastone scrivete "fortunato", ecc.) – poi provate a non scriverlo solo sulla pagina, ma a modificare l'elemento nell'array (es: Paperone Paperone ‐ avaro) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 48 24
aa 2019/2020 PHP: HTTP response ‐ II PHP & HTML La conoscenza di HTML (e CSS) è un pre‐requisito!! Nelle pagine PHP è possibile intervallare linee di script e linee di codice HTML, per es: Bravo! Peccato! oppure utilizzare print/echo per scrivere il codice HTML: The answer to the ultimate question of Life, the Universe and is NB: anche all'interno di un tag HTML! x es:
aa 2019/2020 PHP: HTTP response ‐ IV Più in generale, però, "mischiare" il codice PHP e il codice HTML non è considerata una pratica "pulita", perché tende a mescolare la logica dell'applicazione con l'interfaccia utente Torneremo su questi aspetti più avanti, quando parleremo dell'implementazione del modello MVC in PHP... Un modo per separare la logica applicativa dall'interfaccia utente (eventualmente insieme al modello MVC) è utilizzate un template engine • template engine = strumento che gestisce pagine HTML contenenti marcatori per l'assegnazione d valori generati da PHP • un es. di template engine è Plates (platesphp.com), che consente di gestire i marcatori con variabili PHP (non è necessario imparare una nuova sintassi) Goy ‐ a.a. 2019/2020 Tecnologie Web: approcci avanzati 51 26
Puoi anche leggere