Per chi già consce le funzioni nei vari tipi di programmazione il php non fa che riprendere gli stessi concetti, passaggio per valore o per riferimento. Visibilità di una variabile e così via.
Qui farò solo un ripasso per comprendere la sintassi caratterizzante le funzioni in php.
Nulla di nuovo sotto il sole, oppure far eseguire la funzione che ritorni un valore:
Ho usato un passaggio per valore.
Ma la cosa più bella di usare le funzioni è quella di poter creare un file esterno all’interno del quale salvo la mia funzione e poi inglobarla nel codice. Qui ne do un esempio:
il file somma.php è così definito:
come si nota anche il file somma.php ha i delimitatore di codice php!
Veramente molto bella tale possibilità esattamente come in C++ in cui si possono inglobare pezzi di codice scritti da altri.
Operare in tale maniera permetta ad un gruppo di programmatori di creare applicazioni complesse lavorado in parallelo su tante funzioni per poi inglobarle nel programma principale.
Adesso cercherò di impostare e descrivere l’ambiente per il database MySQL e come si usa MySQL Workbench.
Per installare MySql sul tuo computer con sitema operativo windows, scarica il file di installazione che trovi sul sito ufficiale di MySql a questo indirizzo
installando il pacchetto selezionato chiederà nelle fasi successive quale software effettivamente installare.
Questa è la versione open source del database che per la maggior parte degli scopi andrà benissimo, ti consiglio di scaricare l’installer da 1,6 M perché ti permette di scegliere i vari moduli da installare. La versione a 64 bit non esiste per cui scarica tranquillamente quella a 32 bit. Una volta avviato l’installer, ti apparirà una finestra come questa, in cui dovrai selezionare che tipo di installazione preferisci. Io ti consiglio di selezionare quella di default.
Al termine dell’installazione sull’icona delle applicazione ne compare un’altra, selezionarla:
A questo punto selezionarla e comparirà:
selezionare Launch MySQL Installer.
Selezionare Add.
Aggiungere MySQL Server 8.0 e portarlo nello spazio a destra, poi selezionare MySQL Workbench e portarlo a destra. Al termine dell’installazione si chiederà la password di root del database per potervi accedere
Impostazione php.ini
Per poter utilizzare il database MySql con PHP bisogna individuare la linea extension=mysqli e decommentarla eliminando il punto e virgola.
ambiente MySQL Workbench
Ecco come si presenta dopo aver dato login e password di root.
Prima di iniziare si può creare uno schema o un database dall’interfaccia oppure mediante comandi php nativi. Sotto la voce server vi è la voce users e privileges usarla per creare un nuovo utente e dopo averne aggiunto uno cliccando su Add Account, si possono dare i privilegi su un opportuno database.
Se si vuole lavorare con applicazioni professionali, l’accesso in lettura e scrittura a file sarà quasi inevitabile.
PHP mette a disposizione due funzioni per includere del codice in altri file, quali una libreria di funzioni, una serie di definizioni di variabili, del codice HMTL che può fungere da header o da footer delle pagine etc. etc.
Ad esempio, queste semplici righe di codice includono nel file php tutte le istruzioni html per la normale pagina html.
A questo punto chiarisco un concetto che fino a qui era vago: come devono essere salvate le pagine scritte in php? E’ buona abitudine tenere separato il codice php con il codice html. Poi nel codice php includo con il seguente comando il codice html.
Questo codice mostra come è possibile includere del codice html e lasciare il codice php “pulito”, senza contaminarlo con del codice html. In questo modo, i designers ed i redattori di contenuti possono dedicarsi a scrivere le pagine html, senza dover modificare gli script php.
Questo esempio verifica l’esistenza di un file e tutte le sue caratteristiche: data di creazione, se è modificabile o meno, dimensione e l’ultima modifica.
Da notare che le funzioni filectime() e filemtime() restituiscono le date in formato TIMESTAMP di Unix.
Questo è l’output del precedente comando:
Lettura e scrittura di un file
fgets()
La funzione fgets() legge un file riga per riga
La funzione fopen() permette di aprire un file in tre diverse modalità : lettura (r), scrittura (w) e append (a), (per scrivere in fondo al file, aggiungendo nuovi dati).
bisogna stare attenti che la variabile text deve essere prima inizializzata.
fread()
Legge il file ma a righe invece che tutto in blocco
in questo caso legge per riga ma comunque poi in fase di visualizzazione tutto il file viene letto.
file_get_contents()
Sicuramente il metodo più veloce per leggere un file è il seguente. Ricordiamoci che php non nasce per leggere i file ma questi comandi servono per leggere piccoli file.
In questo caso ogni elemento del vettore è una riga del file.
Non esiste il metodo migliore o peggiore alla fine basta conoscere un metodo per leggere un file.
fwrite()
Si deve introdurre la funzione flock(), a cui bisogna ricorrere ogni volta che la scrittura di un file si può verificare in multiutenza. In pratica, lo scopo di questa funzione è bloccare il file ad un singolo utente, in modo che gli altri utenti che tentano di scrivere nel file trovano la risorsa occupata, aspettando che venga rilasciata per poter poi operare. Sintassi: flock(file_pointer,x) dove x può essere : 1 Condiviso (tutti possono leggere ma nessuno può scrivervi) 2 Esclusivo (nessuno può leggere o scrivere, tranne chi ha ottenuto il privilegio) 3 Rilascio (Rilascio del file)
Copia di un file
Eccone un esempio:
Notate come avviene la chiamata ad fputs(). Come secondo parametro, cioè come dati da scrivere nel file DOLLAROdest, si sfrutta ciò che ritorna la funzione fread operante sul file DOLLAROsrc.
Le regular expressions (espressioni regolari) servono per descrivere dei modelli di stringa. E’ possibile verificare, ad esempio, se un codice fiscale o un indirizzo email sono stati inseriti correttamente.
Un’espressione regolare è una stringa, definita pattern, che contiene al suo interno una serie di simboli attraverso i quali è possibile identificare gruppi di stringhe.
Con il rilascio della versione 5.3 di PHP le funzioni ereg per le espressioni regolari POSIX sono state dichiarate deprecate e verranno rimosse dalla release 6 del linguaggio; utilizzarle non è quindi più una buona pratica, chi desidera impiegare un’alternativa potrà farlo grazie alle funzioni PCRE.
Un’applicazione immediata è quella di controllare i caratteri inseriti in una form che poi verrà usata per fare una query in un database. Il controllo della lunghezza e del tipo di caratteri immessi è fondamentale affinché la query successiva possa aver esito positivo.
Questo controllo è alla base delle pagine dinamiche.
Eccone un esempio:
preg_match()
controllo che lo username sia corretto ossia che contenga solo caratteri minuscoli e lettere, inoltre che abbia lunghezza minima 3 e massima 15.
Inoltre il comando deve essere sempre compreso tra //
Un altro esempio è il seguente:
Che fornisce come output:
340
8652066
quindi estrae il prefisso ed il numero di telefono. Si è usato il comando \d per identificare i numeri e \d* per prendere tutta la sequenza di numeri.
Proviamo solo a pensare quali controlli si devono fare in C++ per la coerenza del dato ed invece la potenza di tale comando.
Adesso unisco i due esempi precedenti supponendo di aver creato una form in cui ho richiesto il numero di telefono e devo controllare il campo e successivamente prendere il prefisso ed il numero di telefono:
Questa tabella mostra tutti i parametri che possono essere inseriti
Meta carattere
Descrizione
\
Carattere generico di escape
^
Delimitatore di inizio della stringa
DOLLARO
Delimitatore di fine della stringa
.
Definisce ogni carattere eccetto il carattere di invio
[
Carattere di inizio della definizione di classe
]
Carattere di fine della definizione di classe
|
Inizio di un ramo alternativo
(
Inizio subpattern
)
Fine subpattern
?
Indica 0 o 1 occorrenze
*
0 o più occorrenze
+
1 o più occorrenze
{
Inizio intervallo minimo/massimo di occorrenze
}
Fine intervallo minimo/massimo di occorrenze
–
Indica un range di caratteri all’interno di parentesi []
.
Indica un singolo carattere
\s
Un carattere di spaziatura (space, tab, newline)
\S
Tutto eccetto un carattere di spaziatura
\d
Un carattere numerico (0-9)
\D
Tutto eccetto un carattere numerico
\w
Una lettera (a-z, A-Z, 0-9, _)
\W
Tutto eccetto una lettera
[aeiou]
Uno dei caratteri compresi nella parentesi
[^aeiou]
Tutto eccetto i caratteri compresi nella parentesi
(foo|bar|baz)
Una delle alternative tra parentesi
preg_match_all()
E’ un comando simile al precedente solo che estrae tutte le occorrenze presente nel criterio di ricerca, ad esempio il seguente estratto di codice:
che cerca i codici numerici all’interno della stringa e fornisce come output i tre numeri.
preg_replace()
Si può sostituire un’espressione con un’altra.
Parametro
Descrizione
DOLLAROpattern
Pattern di ricerca.
DOLLAROreplacement
La stringa che verrà sostituita.
DOLLAROsubject
Stringa da sostituire.
DOLLAROlimit
Limite delle sostituzioni da effettuare (opzionale).
in questo esempio sostituisco i numeri di telefono con degli asterischi, si pensi ad esempio ad una password immessa che deve essere sostituita con degli asterischi o viceversa.
Il risultato nel browser sarà semplicemente la stampa del numero in formato decimale.
Al posto della d posso inserire le seguenti codifiche:
Tipo
Formato
b
binario
c
ascii
f
floating point
o
ottale
s
stringa
x
esadecimale minuscolo
X
esadecimale maiuscolo
Se si vogliono visualizzare solo due cifre dopo la virgola si usa la seguente sintassi:
printf può contenere le seguenti specifiche:
Nome specifica
Descrizione
Esempio
Specifica di tipo
Determina il formato ed il tipo dei dati da visualizzare.
d
Specifica di precisione
Numero di cifre decimali a cui arrotondare un numero non intero
.2
Specifica di riempimento
Determina caratteri di riempimento e larghezza minima dell’output
04d
Specifica di larghezza di campo
Larghezza del campo in cui si vuole visualizzare l’output
20
Specifica di riempimento
con questo comando ho come output 000250
se invece voglio un carattere diverso devo mettere un apice prima del carattere di riempimento.
sprintf()
questo comando copia il comando print in una variabile:
strlen()
lunghezza di una stringa
una sua tipica applicazione è il controllo della lunghezza di una stringa di caratteri che poi deve essere utilizzata ad esempio per una query sul DB.
substr()
Tale comando estrae una sottostringa di caratteri.
l’output sarà:
ting tin ing
quindi la stringa viene considerata come un vettore che parte dalla posizione 0. Il primo comando deve partire dall’indice alla posizione 3 fino alla fine. Il secondo sempre dalla stessa pozione ma solo 3 caratteri. Il terzo parte dalla fine della parola per tre posizioni.
N.B. Per andare a capo ho usato ‘<br>’
strstr()
Ricerca una sottostringa all’interno di una stringa. Il tipico caso è quello della richiesta di un’email, essa sarà valida solo se sarà presente il carattere @.
strstr() è case-sensitive
stristr(), è case-insensitive.
strtoupper()
Tutto maiuscolo
strtolower()
Tutto minuscolo
ucwords()
Solo la prima lettera delle parole componenti una frase sono maiuscole
trim()
Rimuove gli spazi all’inizio e alla fine della stringa
ltrim()
Rimuove gli spazi soltanto all’inizio della stringa
rtrim() o chop()
Rimuove gli spazi alla fine
str_replace()
effettua una sostituzione di testo facendo al ricerca di quel testo ad esempio:
in pratica ricerca la parola $vowels nella frase “Hello word of PHP” e la sostituisce con “” ossia in pratica vengono eliminate le vocali.
Gli array o vettori necessitano di un capitolo a parte proprio per il loro continuo utilizzo all’interno della programmazione; inoltre il php fornisce degli strumenti quali
la ricerca di un elemento,
l’ordinamento crescente o decrescente,
la grandezza di un array
array associativi che permettono di indicizzare un array mediante non più un indice ma un frase che caratterizza il contenuto dell’array
il passaggio da stringa a vettore
inserimento di un elemento di un vettore con un semplice comando
Esempio di inserimento degli elementi di un vettore confrontando la tecnica tradizionale con quella suggerita da php
Tecnica tradizionale (utilizzo spesso echo nl2br per andare a capo)
Creazione con []
Tecnica nuova, si noti come non viene usato il comando array ma direttamente [] con l’inserimento del nuovo elemento del vettore
Utilizzo di explode()
Si può anche trasformare una stringa in un vettore con il comando explode()
Si nota che ho definito una variabile DOLLAROnomi che non è altro che una stringa. Il comando explode suddivide la stringa cercando il carattere separatore, che in questo caso è una stringa, per creare il vettore.
Array associativi
Invece che accedere con un indice numerico si accede con un’etichetta e si associa l contenuto del vettore con => ossia uguale e maggiore:
si noti che ho utilizzato l’indice programmatore per stampare il contenuto del vettore con quel nome dell’indice.
Count()
conta il numero di elementi di un vettore
foreach()
Scorre un vettore finchè trova dei valori senza occuparsi dell’indice e senza creare un indice per scorrerlo, molto pratico. Si noti come il valore del contenuto del vettore viene appoggiato su una variabile d’appoggio:
unset()
questo comando serve per cancellare un elemento del vettore che è presente in una particolare posizione (immaginiamo solo quanto può essere oneroso farlo in C++: si devono spostare tutti gli elementi per coprire il buco che si è creato e quindi ridimensionare i vettore)
Come si nota preferisco sempre prima vedere il vettore e poi usare il comando. SI noti pure come ho preferito usare invece del classico ciclo per la visualizzazione del vettore, quello di usare il comando foreach()
in_array(array)
Altro comando veramente molto utile è quello di cercare un elemento all’interno del vettore. Esso restituisce il valore vero o falso se l’elemento è presente o meno.
sort()
Ordina il vettore in modo crescente
rsort()
Ordina il vettore in modo decrescente
asort()
ordina il vettore associativo in modo crescente (dal più piccolo al più grande) per valore
ksort()
ordina il vettore associativo in modo crescente per chiave
Queste due righe equivalgono a “DOLLAROcodice=”1452””
print “DOLLARO DOLLAROidentificativo\n\n”;
questo comando stampa DOLLAROcodice
print “DOLLARO{DOLLAROidentificativo}”;
Per informare PHP del fatto che si vuole stampare una variabile dinamica, è necessario inserirla fra parentesi graffe. Infatti, la seconda riga di codice stampa 1452.
Le costanti
define(“PI_GRECO”,3.141);
in questo programma, si nota come poter andare a capo, l’uso della variabile statica e della variabile dinamica.