PHP: Hypertext Preprocessor



Documenti analoghi
PHP: Hypertext Preprocessor

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Raggruppamenti Conti Movimenti

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

Modulo 4: Ereditarietà, interfacce e clonazione

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

Lezione 9. Applicazioni tradizionali

Al giorno d oggi, i sistemi per la gestione di database

Una metodologia di progettazione di applicazioni web centrate sui dati

Volumi di riferimento

Esercitazione PAM. (Php Apache MySQL)

Corso di Web Programming

CORSO DI PROGRAMMAZIONE JAVA

XML e PHP. Gestire XML con PHP. Appendice

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

CONCETTO DI ANNIDAMENTO

Lavorare con MySQL Parte Seconda.

Parola chiave extends

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

BASE DI DATI: introduzione. Informatica 5BSA Febbraio 2015

Programmazione a Oggetti Lezione 10. Ereditarieta

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

Progetto CSP: Innovation & Creativity for School. Istituto Tecnico Industriale Statale Giulio Cesare Faccio Vercelli Gruppo 5 ELETTRONICI

2104 volume III Programmazione

Programma del Corso. Dati e DBMS SQL. Progettazione di una. Normalizzazione

Pattern Architetturali e Analisi Architetturale

Object Oriented Programming

DESIGN PATTERN CREAZIONALI INGEGNERIA DEL SOFTWARE INTRODUZIONE SINGLETON. Scopo dei design pattern creazionali

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

PHP e Structured Query Language

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Introduzione JDBC interfaccia java.sql driver caricare i driver

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Architettura MVC-2: i JavaBeans

SQL Server Introduzione all uso di SQL Server e utilizzo delle opzioni Olap. Dutto Riccardo - SQL Server 2005.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di PHP. Prerequisiti. 1 - Introduzione

Le Basi di Dati. Le Basi di Dati

Corso di Informatica

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Definizione di domini

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria

Corso Online Analista Programmatore Microsoft

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

dall argomento argomento della malloc()

Esercitazione n 4. Obiettivi

Programmazione Java Avanzata Spring - JDBC

Tipi MULTISET: accesso

Corso sul linguaggio SQL

Proff. Fabio Ciao e Raffaele Bortone

Architetture Web: un ripasso

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Dispensa di database Access

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

MySQL Database Management System

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

OBIETTIVI SPECIFICI DI APPRENDIMENTO

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Classi Oggetti public private this static static

Introduzione al MATLAB c Parte 2

Progettazione : Design Pattern Creazionali

Java: Compilatore e Interprete

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione a PHP Gestione dei Dati e della Conoscenza

Il BACKUP è disponibile in

Corso di Informatica Modulo T3 B2 - Database in rete

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

IL DAT A B A S E DI ALGE B R A N D O

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

19. LA PROGRAMMAZIONE LATO SERVER

Tecnologie di Sviluppo per il Web

Esercizi della lezione 5 di Java

Gestione dei File in C

Informatica per le discipline umanistiche 2 lezione 10

Oggetti Lezione 3. aspetti generali e definizione di classi I

Esercizio data base "Biblioteca"

Gestione Automatizzata di una Lista Nozze

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

Capitolo 13. Interrogare una base di dati

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Transcript:

Corso di Laurea Specialistica in Ingegneria Informatica Corso di Linguaggi e Tecnologie Web A. A. 2011 - PHP: Hypertext Preprocessor Caratteristiche avanzate Eufemia Tinelli 1

Contenuti PHP ad oggetti Definizione di classi, metodi e oggetti PDO & PDOStatement: Interazione con i database Gestione delle sessioni con la classe HTTPSession MVC con PHP Implementazione utente Utilizzo di Framework PHP 2

PHP ad oggetti Con la versione 4 di PHP è stato introdotto il supporto al paradigma di programmazione orientato agli oggetti, poi migliorato nella versione 5 PHP 5 consente di: definire classi (individuare tutte le caratteristiche e i comportamenti di un determinato tipo di oggetti: decidere quali attributi e metodi sono disponibili a tutti gli script e quali sono privati) creare oggetti che siano istanza di classi creare gerarchie di oggetti (eredità semplice) utilizzare l incapsulamento (information hiding) utilizzare il polimorfismo (overloading dei metodi) 3

Creare una classe in PHP5 <?php class Prova { public $attr_public; private $attr_private; protected $attr_protected; public function construct(parametri) { // operazioni di inizializzazione public function destruct(parametri) { // operazioni eseguite prima della distruzione public function publicmethod(parametri) { protected function protectedmethod(parametri) {?> private function privatemethod(parametri) { 4

Instanziare una classe Il costruttore (implementato dal metodo construct) viene eseguito ogni volta che si crea un nuovo oggetto. Può ricevere dei parametri che servono ad inizializzare i valori delle proprietà interne dell oggetto da creare Il distruttore (implementato dal metodo destruct) che verranno chiamati ogni qualvolta il garbage collector di PHP distruggerà l'oggetto. $oggetto= new nome_classe(parametri del costruttore) Il meccanismo per accedere a una variabile (o metodo) interna ad una classe è rappresentato dalla seguente sintassi, dove $this rappresenta l oggetto che sarà costruito a runtime: $this->nome variabile $this->nome_metodo(parametri) Per accedere a una proprietà o a un metodo di un oggetto si utilizza la sintassi: $oggetto ->nome_variabile $oggetto ->nome_metodo(parametri) 5

Passaggio dei parametri Nella metodologia a oggetti i passaggi dei parametri alle funzioni possono avvenire o per valore o per riferimento Nel PHP 5 gli oggetti vengono passati solo per riferimento non si fa una copia dell oggetto, ma viene inoltrato alla funzione un indirizzo della posizione dell oggetto in memoria Passaggio esplicito per riferimento: Per passare per riferimento anche variabili di tipi primitivi basta aggiungere, all interno della dichiarazione della funzione, il carattere & prima del nome del parametro da passare <?php // Passaggio per riferimento function incremento(&$num){ $num ++; return $num; $numero = 3; incremento($numero); echo $numero; // Stampa 4;?> <?php // forzare anche il ritorno di tipi primitivi per riferimento function &incrementanum(&$num){ $num += 10; return $num;?> 6

Superclassi, sottoclassi e overriding: : Esempio (1) <?php class A { public function sayhello() { echo "Hello!"; class B extends A { public function sayhello() { echo "Ciao Ciao!"; $b = new B(); // stampa "Ciao Ciao!" $b->sayhello();?> <?php class A { public function sayhello() { echo "Hello!"; class B extends A { public function sayhello() { parent::sayhello(); echo "Ciao Ciao!"; $b = new B(); // stampa "Hello! Ciao Ciao!" $b->sayhello();?> 7

Superclassi, sottoclassi e overriding: : Esempio (2) <?php class A { public function construct($a, $b) { $this->a = $a; $this->b = $b; // metodi... class B extends A { public function construct($a, $b, $c) { parent:: construct($a, $b); $this->c = $c; // metodi... $b = new B(10, 20, 30); echo $b->a; // stampa 10 echo $b->b; // stampa 20 echo $b->c; // stampa 30?> 8

PDO - PHP Data Objects (2) Rappresenta un persistent layer di elevata astrazione grazie al quale è possibile interfacciare ed utilizzare allo stesso modo qualunque database, rendendo di fatto portabili il codice sorgente e le applicazioni che ne fanno uso La portabilità è garantita utilizzando drivers che, implementando le PDO Interfaces, espongo metodi comuni che incapsulano caratteristiche specifiche e proprietarie di ogni DB utilizzabile (non richiedere più l'utilizzo di funzioni specifiche come, per esempio, le mysql_* e pgsql_* functions) Installazione basta decommentare le estensioni che interessano, es.: extension=php_pdo_mysql.dll extension=php_pdo_pgsql.dll extension=php_pdo_sqlite.dll DSN (Data Source Name) permette a PHP di scegliere correttamente il driver specifico in fase di connessione al DB. E costituito da: driver ':' stringa di connessione (specifica per ogni DB) 9

Esempi PDO PostgreSQL ch06.zip Connessione & disconnessione (pdo-conn-test.php) Gestione degli errori (adv-pdo-test.php) CREATE TABLE "user" ( "id" SERIAL PRIMARY KEY NOT NULL, "username" character varying(32), "password_hash" character varying(32), "first_name" character varying(64), "last_name" character varying(64)); GRANT ALL PRIVILEGES ON "user" TO "chaptersix"; GRANT ALL PRIVILEGES ON "user_id_seq" TO "chaptersix"; INSERT INTO "user"("username", "password_hash", "first_name", "last_name") VALUES('ed', md5('berkhamsted'), 'Ed', 'Lecky-Thompson'); INSERT INTO "user"("username", "password_hash", "first_name", "last_name") VALUES('steve', md5('newyork'), 'Steve', 'Nowicki'); INSERT INTO "user"("username", "password_hash", "first_name", "last_name") VALUES('marie', md5('leicester'), 'Marie', 'Ellis'); INSERT INTO "user"("username", "password_hash", "first_name", "last_name") VALUES('harriet', md5('cambridge'), 'Harriet', 'Frankland'); 10

Esempio preparare gli statement: due modalità per passare parametri variabili alle query SQL $i = 0; $strusername = ed ; $strquery = "SELECT * FROM \"user\" WHERE username = $strusername "; $objstatement = $objpdo->prepare($strquery); $objstatement->execute(); while ($arrow = $objstatement->fetch(pdo::fetch_assoc)) { print"row$i<br/>\n"; foreach ($arrow as $key => $value) { print " - Column $key, value $value<br />\n"; $i++; La stringa della query è elaborata dal motore SQL La stringa della query è elaborata direttamente da PHP Definisco solo un parametro da elaborare successivamente $i = 0; $strusername = ed ; $strquery = "SELECT * FROM \"user\" WHERE username = :username"; $objstatement = $objpdo->prepare($strquery); $objstatement = $objpdo->bindparam( :username, $strusername, PDO::PARAM_STR); $objstatement->execute(); while ($arrow = $objstatement->fetch(pdo::fetch_assoc)) { print"row$i<br/>\n"; foreach ($arrow as $key => $value) { print " - Column $key, value $value<br />\n"; $i++; 11

Creazione di istanze singleton Come evitare la creazione di molteplici istanze della classe PDO in una data richiesta? <?php Class PDOFactory { public static function getpdo($strdsn) { $strkey = md5($strdsn); Implementazione del pattern Singleton if(!($globals[ PDOS ][$strkey] instanceof PDO)) { $GLOBALS[ PDOS ][$strkey] = new PDO($strDSN); { return($globals[ PDOS ][$strkey]); Al posto di $objpdo = new PDO($strDSN); dobbiamo usare la seguente istruzione: $objpdo = PDOFactory::getPDO($strDSN); 12

Gestione delle sessioni su DB ch12.zip Classe HTTPSession (HTTPSession.phpm) 13

Pattern Model-View View-Controller (MVC) Divide un applicazione interattiva in 3 componenti Il Model incapsula funzionalità e dati che sono indipendenti dalla specifica rappresentazione dell output o dal comportamento di input Le Views mostrano le informazioni all utente. Una View ottiene i dati dal Model (possono esserci più View di uno stesso Model) I Controller gestiscono l input utente e la comunicazione Model- View. I componenti Controller ricevono l input che di solito codifica un evento come il movimento del mouse o un input da tastiera. Gli eventi sono poi tradotti in service request per il Model La consistenza tra UI e Model è garantita da un meccanismo di propagazione dei cambiamenti quando un modello cambia il suo stato, notifica tutte le sue viste ed i suoi controller del cambiamento in modo che questi possano aggiornare il loro stato in modo appropriato 14

Pattern MVC in PHP 15

Esempio in PHP.. prima <? // connessione alla base di dati $cn = mysql_connect('localhost', 'utente', 'password'); mysql_select_db('db', $cn); // consultiamo SQL per ottenere gli articoli $risultato=mysql_query('select data, titolo FROM articolo', $cn);?> <h1>listato di articoli</h1> <table> <tr> <th>data</th> <th>titolo</th> </tr> <?php // stampa il risultato while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC)) { echo "<tr>"; echo "<td> ".$riga['data']." </td>"; echo "<td> ".$riga['titolo']." </td>"; echo "</tr>";?> </table> <?php //chiudiamo la connessione mysql_close($cn);?> 16

dopo MVC in PHP (1) <? require('vista.php'); $cn = mysql_connect('localhost', 'utente', 'password'); mysql_select_db('db', $cn); $risultato = mysql_query('select data, titolo FROM articolo', $cn); $articoli = array(); while($articolo = mysql_fetch_assoc($risultato)) { $articoli[] = $articolo; mysql_close();?> <h1>listato di Articoli</h1> <table> <tr> <th>data</th> <th>titolo</th> </tr> controller.php <?php foreach($articoli as $articolo):?> <tr> <td> <?php echo $articolo['data']?> </td> <td> <?php echo $articolo['titolo']?> </td> </tr> <?php endforeach;?> </table> view.php 17

dopo MVC in PHP (2) <?php function getarticoli() { $cn = mysql_connect('localhost', 'utente', 'password'); mysql_select_db('db', $cn); $cn); $risultato = mysql_query('select data, titolo FROM articolo', $articoli = array();?> model.php while($articolo = mysql_fetch_assoc($risultato)) { $articoli[] = $articolo; mysql_close(); require('modello.php'); $articoli = getarticoli(); controller.php require('vista.php'); control.php 18

Zend Framework (ZF) - http://framework.zend.com framework.zend.com/ Zend Framework è un framework open source per lo sviluppo di applicazioni e servizi web con PHP 5 che supporta il pattern MVC ZF è costituito da una libreria di componenti che possono essere raggruppati in sei macro categorie: Core MVC Autenticazione ed Accesso Internationalization Servizi Web Inter-application communication La struttura di un progetto ZF 19

MVC in Zend Framework Architettura logica Classi Zend 20

Riferimenti E. L. Thompson, S. D. Nowicki, T. Myer, PHP6 - Guida per lo sviluppatore, Hoepli, 2009 P. B. MacIntyre, PHP Le tecniche per scrivere il codice migliore, Hops, 2010. 21