Array e WHILE. Array nelle Stringhe. Utilizzare le Funzioni. Funzioni



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

Introduzione al MATLAB c Parte 2

Funzioni in C. Violetta Lonati

Dove die( stringa ) è una funzione di utilità del php che stampa la stringa e fa terminare lo script.

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:

Introduzione alla programmazione in C

Guida all uso di Java Diagrammi ER

Protezione. Protezione. Protezione. Obiettivi della protezione

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

I file di dati. Unità didattica D1 1

Java: Compilatore e Interprete

Gestione dei File in C

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

FtpZone Guida all uso

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Allocazione dinamica della memoria - riepilogo

Gli Array (2) Gli Array. Gli Array (4) Gli Array (3)

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

GESTIONE INFORMATICA DEI DATI AZIENDALI

Cliens Gestione Studio Legale Modifica dei Reports

Arduino: Programmazione

Concetto di Funzione e Procedura METODI in Java

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Gestione della memoria centrale

P a s q u a l e t t i V e r o n i c a

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

Database. Si ringrazia Marco Bertini per le slides

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Lezione 8. La macchina universale

Corso di Informatica

Alcune regole di base per scrivere un programma in linguaggio C

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

STAMPA UNIONE DI WORD

XML e PHP. Gestire XML con PHP. Appendice

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Mini-HOWTO sull ordinamento dei dati Release 0.01

Le variabili. Olga Scotti

Richiesta pagina PHP (es: index.php)

Programmazione I - Laboratorio

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Laboratorio di Informatica

COME DEFINIRE DELLE DOWNLOAD RULES CON VPOP3

Inizializzazione, Assegnamento e Distruzione di Classi

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

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma

Gestione dei File. dischi nastri cd

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Funzioni. Il modello console. Interfaccia in modalità console

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Il programmatore che c e in noi Lezione 12 Statements

CONCETTO DI ANNIDAMENTO

POSTA ELETTRONICA Per ricevere ed inviare posta occorrono:

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Lezione II: Web server e ambiente di lavoro

Introduzione al Linguaggio C

Iniziamo la panoramica sul funzionamento dell'svn sulla suite S.A.

Convertitori numerici in Excel

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale

Gestione dei processi

Esercizi su. Funzioni

Introduzione al linguaggio C Gli array

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Access. P a r t e p r i m a

puntatori Lab. Calc. AA 2007/08 1

Organizzazione degli archivi

Strutturazione logica dei dati: i file

Progetto di simulazione molecolare per il corso di Complementi di algoritmi A.A

Corso di Fondamenti di Informatica

dall argomento argomento della malloc()

Scuola Superiore Sant Anna. Progetto parte Unix. AA : Distributed File Repository

Introduzione a Dev-C++

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

IL MIO PRIMO SITO: NEWS

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Sottoprogrammi: astrazione procedurale

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

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica

Manuale servizio ScambioDati

anno Introduzione all'algoritmica per i Licei 5 Funzioni.

FtpZone Guida all uso Versione 2.1

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Demo. La palette allinea. La palette Anteprima conversione trasparenza. Adobe Illustrator CS2

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

ESERCITAZIONE Semplice creazione di un sito Internet

Matlab: Gestione avanzata dei file

Linguaggio C - Stringhe

STAMPA DI UNA PAGINA SEMPLICE

Il Web Server e il protocollo HTTP

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Plate Locator Riconoscimento Automatico di Targhe

Codifica: dal diagramma a blocchi al linguaggio C++

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Capitolo 13. Interrogare una base di dati

Client - Server. Client Web: il BROWSER

Manuale swiss-archives.ch

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Transcript:

Array e WHILE Array nelle Stringhe Si può utilizzare il anche costrutto while insieme alle istruzioni each e list nella condizione: while(list($indice,$valore)=each($mio_array)) { echo $Indice - $Valore ; list assegna alle variabili $Indice e $Valore rispettivamente l indice e il valore dell elemento restituito da each;! All interno di una stringa è possibile accedere al valore degli elementi di un array. echo valore inserito: $Mio_Array[1] ; echo capitale della Francia: $Capitali[Francia] ;! Notare che all interno di una stringa la chiave non è compresa tra virgolette doppie! Quando si è scorso tutto l array, each restituisce un valore nullo, rendendo così falsa la condizione. Funzioni! Ogni vero linguaggio di programmazione ha delle possibilità per l astrazione procedurale.! Un modo per chiamare pezzi di codice in modo da poterli utilizzare come blocchi di costruzione.! Il meccanismo di PHP per questo genere di astrazione è la funzione.! Ci sono due tipi di funzioni: Implementate nel linguaggio dagli sviluppatori. Definite dall utente / programmatore PHP. Utilizzare le Funzioni! La sintassi di base per utilizzare una funzione è: nome_funzione(espr1, espr2,, esprn);! Quando PHP incontra una chiamata a funzione Valuta ogni espressione argomento. Utilizza i valori come input per la funzione.! Dopo l esecuzione il valore restituito è il risultato dell intera espressione.

Valori di Ritorno! Ogni chiamata a funzione è un espressione PHP.! Ci sono solo due motivo per includerne una: Per il suo valore di ritorno. Per gli effetti secondari che produrrà.! E possibile combinare le due ragioni.! Si utilizza il tipo array per restituire più di un valore. PHP e Funzioni! PHP è molto pulito e flessibile, ma non c è molto.! La maggior parte della potenza risiede nel gran numero di funzioni incorporate (built-in).! Gli sviluppatori possono contribuire semplicemente aggiungendo nuove funzioni. Non cambia quello su cui gli altri si appoggiano.! http://www.php.net è la fonte ufficiale per tutte le informazioni. Definire le proprie funzioni! Le definizioni di funzioni hanno la seguente forma: function nome_funzione($arg1, $arg2, ) { dichiarazione1; dichiarazione2;! A differenza delle variabili I nomi di funzione vengono convertiti in minuscolo prima di essere valutati. Parametri Attuali e Formali! Non è un requisito passare variabili come argomento.! I parametri attuali possono essere un espressione che calcola un valore.! Se si passano più argomenti? PHP ignora I parametri in eccesso.! Se si passano meno argomenti? PHP tratta I parametri formali mancanti come se fossero variabili slegate.

Ambito di funzioni e variabili! Ogni funzione è un piccolo mondo a sè.! In generale, il significato di una variabile all interno di una funzione non ha niente a che vedere con il resto del codice.! Gli unici valori a cui si ha accesso sono quelli dei parametri formali. I valori sono quelli copiati dai parametri attuali.! Questi comportamenti possono essere ignorati attraverso dichiarazioni particolari.! Per default, una variabile è locale Global vs. Local Ristretta all ambito in cui è stata dichiarata.! La dichiarazione global dice a PHP di riferirsi ad una variabile come se essa esistesse già. functio foo() { global $myglob; echo $myglob++; $myglob = 0; foo(); $myglob = 7; foo(); Variabili Statiche! Per default, le funzioni non tengono memoria della loro esecuzione. Con ogni chiamanta di funzione le variabili locali agiscono come se fossero appena state create.! La dichiarazione static ignora questo comportamento, facendo mantenere il valore tra una chiamata e l altra alla funzione. functio foo() { static $myglob; echo $myglob++; for($i=0;$i<10;$i++) foo(); Variabili Statiche (2)! E possibile fornire un valore iniziale alla variabile static. Questo valore viene dato solo la prima volta. functio foo() { static $myglob = 0; echo $myglob++; for($i=0;$i<10;$i++) foo();

Ambito per le funzioni! Ancora più semplice delle variabili!! Le funzioni devono essere definite una volta dallo script.! L ambito delle funzioni è implicitamente globale.! Una funzione definita da qualche parte in uno script è disponibile dovunque in quello script.! PHP4 precompila gli script. Potete definire le funzioni anche dopo un loro utilizzo. PHP3 NO!. Ancora su include e require! Entrambe le funzioni impostano nel file in esecuzione, il contenuto del file passato.! A differenza di include, require viene chiamata una sola volta anche se presente più volte (ex: ciclo for). PHP sostituirà alla chiamata require il contenuto del file. Non è abbastanza intelligente da tenere traccia delle chiamate precedenti. Si possono creare pericolosi loop da cui difficilmente usciremo. Una soluzione semplice! $isloaded è una variabile istanziata all interno del file incluso. Funzioni Ricorsive! In PHP4 le funzioni ricorsive non sono un problema. Non è necessario definire le funzioni prima di utilizzarle. if(!isset($isloaded)) include( miefunzioni.inc ); functio foo($counter) { if($counter > 0) { echo contatore:. $counter; foo(--$counter); foo(10);! Assicuratevi che ci sia un caso base!

Tips & Tricks! Spesso è utile avere il numero di argomenti passati dipendente dal contesto in cui la funzione viene chiamata.! Ci sono tre modi per farlo: Definire la funzione con argomenti predefiniti; quelli mancanti nella chiamata avranno il valore predefinito. Utilizzare un argomento array per contenere I valori. Il corpo della funzione deve analizzarlo nel modo corretto. Utilizzare le funzioni: " func_num_args(), func_get_arg(), func_get_args() Argomenti Predefiniti! Basta trasformare semplicemente il nome del parametro formale in un espressione di assegnamento. PHP farà corrispondere gli attuali ai formali sino a quando c è ne sono disponibili. functio foo($arg1 = parametro1, $arg2 = parametro2, $arg3 = parametro3 ) { echo \$arg1 è $arg1, \$arg2 è $arg2, \$arg3 è $arg3 ; foo( qui ); foo( qui, quo ); foo( qui, quo, qua ); Array come parametri! E possibile utilizzare un array come canale di comunicazione. functio foo($myarray) { if(!is_array($myarray)) return false; $a = IsSet($myarray[ arg1 ])? $myarray[ arg1 ] : parametro1 ; $b = IsSet($myarray[ arg2 ])? $myarray[ arg2 ] : parametro2 ; $c = IsSet($myarray[ arg3 ])? $myarray[ arg3 ] : parametro3 ; echo \$a è $a, \$b è $b, \$c è $c ; foo(array()); $tmp=array( arg1 => miopar1, arg2 => miopar2, arg3 => miopar3 ); foo($tmp);! func_num_args() Argomenti multipli Non prende argomenti. Restituisce il numeri di argomenti passati alla funzione da cui è stata chiamata.! func_get_arg() Prende un argomento intero n e restituisce l n-esimo argomento alla funzione da cui è stata chiamata. Gli argomenti sono numerati a partire da 0.! func_get_args() Non prende argomenti e restituisce un array contenente tutti gli argomenti nella funzione dalla quale è stata chiamata.

functio foo() { $count=func_num_args(); $a = $count > 0? func_get_arg(0) : parametro1 ; $b = $count > 1? func_get_arg(1) : parametro2 ; $c = $count > 2? func_get_arg(2) : parametro3 ; echo \$a è $a, \$b è $b, \$c è $c ; foo(); foo( primo, secondo ); Esempio valore vs. riferimento! In PHP il comportamento predefinito è chiamata per valore. PHP fà copie delle variabili quando le si passano. La funzione non è in grado di modificare il contenuto originale.! E possibile fare in modo che le funzioni modifichino I valori passati, con due modalità diverse: Nella definizione di funzione. Nella chiamata di funzione. (già visto) Valore vs. riferimento (2)! Se si vuole definire il valore di un parametro di una funzione per riferimento, è sufficiente una & davanti al parametro formale. functio foo(&$arg1, $arg2) { echo \$arg1 è $arg1, \$arg2 è $arg2 ; $arg1 = valore alterato! ; $a = parametro1 ; $b = parametro2 ; foo($a, $b); foo($a, $b); Variabili nomi di funzione! Invece di scrivere un nome di funzione nel codice, si assegna la funzione ad una variabile.! Chi conosce il C, penserà ai famosi puntatori a funzione.! Chi conosce Scheme o Common Lisp, troverà il discorso molto familiare. functio foo() { echo Hello, World! ; $a = foo ; $a();

Funzioni di Lettura e Scrittura su file! La lettura dei files è abbastanza sicura Se sulla macchina che usiamo non girano documenti sensibili.! La scrittura è un azione pericolosa.! Cercate di confinare le operazioni di I/O su file.! Siate coscienti che ci possono essere problemi.! Solo utenti accreditati dovrebbero fare operazioni sul file system.! fopen(nome_file, modalità); Apertura di files E necessario assegnare il risultato di fopen() ad una variabile. Se la funzione và a buon fine, PHP assegnerà al risultato un valore intero. Altrimenti un valore falso. Richiesto da operazioni successive.! Il sistema vi mette a disposizione un numero limitato di descrittori di files. Appena terminate le operazioni su di un file, dovreste chiuderlo. Apertura di files (2)! Possono essere aperti in sei modi differenti: r - sola lettura. r+ - lettura e scrittura. w - solo scrittura. w+ - scrittura e lettura. a - solo scrittura alla fine di un file. a+ - lettura e scrittura alla fine di un file. Apertura di files (3)! 4 tipi di connessioni che possono essere aperte: HTTP FTP I/O standard File System

Apertura di files: http ed ftp! fopen HTTP Cerca di aprire una connessione HTTP ad un file normalmente servito da un server WEB. PHP bara e fà credere che la richiesta arrivi da un browser che stà navigando. $fd = fopen( http://www.miosito.org/index.html/, r );! fopen FTP Cerca di stabilire una connessione FTP ad un server remoto. Il server remoto deve supportare il modo passivo. Le operazioni possono essere o di scrittura o di letture. (non tutte e due contemporanemente). Apertura di files: filesystem! E il modo più comune!! A meno di particolari specifiche (http, ftp) PHP utilizzerà di default questo metodo. $fd = fopen( /somewhere/location/myfile.txt, r );! Ricordare che I files e le directory devono essere leggibili o scrivibili dal processo UID di PHP. Se si condivide un server tra più utenti, qualunque altro utente PHP sarà in grado di leggere I files. $fd=fopen( ftp://nomeutente:password@www.sito.org/pag.txt/, r ); Lettura di file! fread() prende come argomenti un identificatore di file ed una dimensione del file in bytes.! Se la dimensione di file non è sufficente a leggere l intero file, PHP si arresterà al byte specificato.! A meno di non avere particolari motivi è meglio che PHP trovi la dimensione esatta di tutto il file, usando la funzione filesize(nomefile). Lettura di file (2) $mystring = fread($fd, filesize($nomefile));! Estremamente utile! Permette di trasfoamre qualsiasi file in stringa. Le stringhe possono essere manipolate con milioni di funzioni! Dividere le stringhe in array ( file(), explode() )! Se si vuole leggere l ouput su pagina web, utilizzare la funzione readfile(nomefile). $mystring = fread($fd, filesize($nomefile));

Lettura di file (3)! Per fare operazioni sulle singole righe si può usare la funzione: fgets(descrittore, bytes). $fd = fopen( esempio.txt, r ); while(!feof($fd)) { $riga = fgets($fd, 4096); if(strcmp($riga, $destinazione) == 0) echo trovata corrispondenza! ; fclose(fd); //ricordarsi di chiudere!!! Lettura di file (4)! Se si desidera leggere il file come un array, è possibile utilizzare la funzione: file(nomefile).! Crea un array: ogni elemento è una riga del file originale con un carattere di interruzione riga.! La funzione file non richiede un operazione separata di apertura e chiusura file. $fd = fopen( esempio.txt, r ); // NON SERVE $myarray = file( esempio.txt ); fclose(fd); // NON SERVE! fwrite(descrittore, stringa). Prende in input un descrittore ed una stringa. Restituisce il numero di caratteri scritti! fputs(descrittore, stringa). E identica ad fwrite. Scrittura di file! La scrittura di files in un server WEB può essere un problema di sicurezza.! A meno di non avere buoni motivi per farlo, non fatelo!!! $fd = fopen( esempio.txt, w ); $mystring = Hello World! ; $fout = fwrite($fd, $mystring); echo Ho scritto $fout caratteri! ; fclose(fd);! La funzione feof controlla la fine del file su un puntatore di file.! Prende come argomento un nome di file. $fd = fopen( esempio.txt, r ); while(!feof($fd)) { $riga = fgets($fd, 4096); if(strcmp($riga, $destinazione) == 0) echo trovata corrispondenza! ; fclose(fd); //ricordarsi di chiudere!!! feof

File_exists! La funzione file_exists() può essere utilizzata quando si agisce sul file system.! Controlla il fs locale per cercare un file dal nome specificato: if(!file_exists( esempio.txt )) { $fd = fopen( esempio.txt, w+ ); else { $fd = fopen( esempio.txt, a+ ); fclose(fd); //ricordarsi di chiudere!!!