Ora che abbiamo conosciuto un po’ PHP e ne abbiamo valutato i vantaggi, prima di addentrarci nel vivo di questo linguaggio di programmazione è il caso di chiarire alcune nozioni di base utili alla sua comprensione.
Iniziamo col presentare un concetto perno di tutti i linguaggi di programmazione, imprescindibile per il loro apprendimento: quello di “variabile”. Se bazzichi un po’ il mondo della programmazione informatica, ne avrai, senza dubbio, sentito parlare. Ma che cos’è una variabile? Una variabile corrisponde ad una porzione di memoria in cui viene scritto un dato di qualsiasi tipologia. In altre parole, potremmo paragonare una variabile ad una sorta di “contenitore” al cui interno vengono salvati dei dati.
È doveroso capire cosa potrebbe essere classificato in quanto dato. I dati sono tutte le informazioni digitali che abbiamo a disposizione o che verranno create per raggiungere il nostro scopo, cioè quello di risolvere un problema.
In ogni contenitore – dunque in ogni variabile – viene inserito un dato caratterizzato dalla sua tipologia (in altre parole, una sua caratteristica intrinseca che lo contraddistingue dagli altri tipi di dato).
Proviamo a capire meglio questo concetto grazie all’aiuto di una metafora. Immagina che le nostre variabili siano i cassetti di una cassettiera. Ogni cassetto contiene una tipologia di indumento: ci sarà un cassetto per i calzini, un cassetto per gli indumenti intimi, uno per le t-shirt e così via. È naturale supporre che non potremo mai utilizzare un calzino al posto di una t-shirt, in quanto la sua caratteristica intrinseca è, in questo caso, lo scopo cui è destinato: coprire i piedi.
Non puoi utilizzare un calzino per coprire il busto, o le braccia, giusto? Bene! Gli indumenti sono i nostri dati, suddivisi per tipologia.
Ora, il valore del dato in questione puo’ variare durante l’esecuzione del programma o puo’ rimanere lo stesso per tutta la sua durata.
Fatte queste premesse, i linguaggi di programmazione si suddividono in due grandi famiglie in base a come vengono create e gestite proprio queste variabili: linguaggi a tipizzazione forte e linguaggi a tipizzazione debole
Tipizzazione forte e tipizzazione debole.
Nei linguaggi a tipizzazione forte, ogni variabile viene creata dichiarando quale tipo di dato questa debba contenere. Questa informazione rimarrà invariata per tutto il ciclo di vita del programma.
Riprendiamo l’esempio poco più sopra: nei linguaggi a tipizzazione forte ogni cassetto ha una sorta di “etichetta” che definisce quale tipologia di indumento può esservi inserita. E questa etichetta sancirà l’utilizzo di quel cassetto per quel tipo di indumento fino alla fine del ciclo del programma.
Ci spieghiamo ancora meglio: una variabile che viene dichiarata come contenitore per un numero intero – che è un tipo di dato – ad esempio, potrà contenere solo e soltanto un numero intero al suo interno (1,34,56,4,37,1000 ecc).
Vediamo un esempio utilizzando Java, uno dei linguaggi a tipizzazione forte più conosciuti; dichiariamo due variabili:
public class HelloWorld{ public static void main(String[] args) { String primo_dato = "5"; //é una stringa con un solo carattere che assume il valore di cinque int secondo_dato = 5; //é un numero intero System.out.println("Primo dato"+primo_dato+"\n"); System.out.println("Secondo dato"+secondo_dato+"\n"); } } //IN OUTPUT //Primo dato 5 //Secondo dato 5
Analizziamo le due variabili:
La prima variabile contiene una stringa, la seconda contiene un numero intero.
La variabile “primo dato” non sará MAI uguale alla variabile “secondo dato” e non potremo MAI “cambiare” il contenuto di “primo dato” in un numero intero, così come non potremo MAI “cambiare” il valore di “secondo dato” in una stringa.
Questa è proprio la peculiarità di un linguaggio a tipizzazione forte. Dichiariamo sin dall’inizio quale tipo di dato conterrà una variabile ed il suo contenuto sarà sempre di quel tipo.
Quindi potremo sostituire una stringa con un’altra stringa ma mai con un numero.
Quando dichiariamo una variabile, con il relativo tipo, e salviamo un valore al suo interno, la stiamo INIZIALIZZANDO.
Nei linguaggi a tipizzazione debole, invece, possiamo cambiare il valore contenuto all’interno di una variabile sostituendolo con un tipo di dato differente.
Sarà, dunque, possibile svuotare il cassetto dei calzini e inserirci le tue t-shirt preferite!
Quindi, una variabile che, in un determinato momento, contiene una stringa, in un altro momento può contenere un numero intero o un qualsiasi altro tipo di dato. PHP è un linguaggio a tipizzazione debole.
TIPI DI DATO
Veniamo, ora, al nocciolo della questione: andiamo a classificare i TIPI di dato.
Il tipo di un dato e’ caratterizzato due informazioni: il valore stesso e le operazioni con cui possiamo manipolarlo.
Un numero, ad esempio, puo’ contenere tutti i valori che vanno da –∞ a +∞ e puo’ essere manipolato tramite le operazioni logico-matematiche.
Una stringa, invece, e’ una sequenza di caratteri alfanumerici e speciali su cui possiamo effettuare operazioni di conteggio, concatenazione, ecc…
In PHP ci sono 10 tipi di dato:
- Integer
- Float
- String
- Boolean
- Array
- Object
- Callable
- Iterable
- NULL
- Resource
Di questi, ne analizzeremo 7 – i più utilizzati – che divideremo in tre famiglie:
- DATI SEMPLICI: Integer, Float, String, Boolean
- DATI SPECIALI: NULL
- DATI COMPOSTI: Array ,Object
Integer (interi)
0, 5, 46, 130, 980, 1000 e via discorrendo, come anche -1, -13, -56, -100, -765, -1000 ma anche molti altri (e per questi consigliamo di far riferimento alla documentazione ufficiale dovessero essere di nostro interesse).
Gli integer, in sostanza, sono tutti numeri INTERI positivi o negativi.
Float (numeri in virgola mobile, in inglese “Floating point o Double”)
Si riferisce a quella tipologia di numero non intero, cioè che contiene una virgola definita mobile perché si “sposta”, ovvero la vedremo in posizioni “diverse” in base alla “precisione”, cioè alla quantità di numeri presenti dopo la virgola. Per esempio:
1,1 ha precisione uno
23,72 ha precisione due
5,576 ha precisione tre, e così via.
Con il tipo float, tuttavia, si indicano anche altre tipologie di numeri: rimandiamo sempre alla documentazione ufficiale PHP per maggiori dettagli.
String (testi o stringhe di caratteri)
Il tipo di dato stringa è un insieme di caratteri espressi tra apici.
“Questa è una stringa” o, anche, “quESta è UNA stRInga” e persino “1223429 12489 4058934” sono tre semplici esempi di stringhe, di insieme di caratteri.
Il terzo esempio, peró, potrebbe confonderti: se è un insieme di numeri, come puo’ essere considerato una stringa? La spiegazione è già nella definizione: come abbiamo già detto, una stringa é un insieme di caratteri alfanumerici racchiusi tra apici (‘’) o doppie virgolette (“”).
Senza i sopracitati apici quella successione di numeri sarebbe stata considerata un tipo di dato integer.
Boolean (valori booleani true/false)
E’ un tipo di dato che può esprimere solo due valori: vero o falso.
Due o piú numeri sono uguali?
Due o piú parole sono uguali?
Esiste una parola in una frase?
Esiste una lettera in una frase?
Un dato ha assunto un certo valore?
Queste domande sono assai esemplificative: avranno, all’interno del linguaggio, proprio una risposta del tipo Vero o Falso.
Null (tipo di dato nullo)
Il valore speciale null si riferisce ad una variabile senza alcun valore. Null in PHP è considerato un tipo di dato.
Array ed oggetti
Prima di andare avanti, facciamo una piccola premessa: solitamente, nei linguaggi di programmazione orientati agli oggetti tutte le tipologie di dati composti sono figli di un genitore chiamato Object (Oggetto) e gli array ne fanno parte. In PHP, invece, gli array non sono figli di Object. Array ed Oggetti, quindi, sono, in PHP, due cose differenti.
PHP Array
Un array è un insieme ordinato di elementi che possono appartenere ad una qualsiasi delle tipologie descritte sopra; un array, infatti, può contenere al suo interno persino ulteriori array o oggetti.
Gli array si suddividono in due tipologie:
- Array semplici
- Array associativi
Abbiamo definito l’array un insieme ordinato proprio per delineare la differenza tra le due tipologie:
nel caso dell’ array semplice, ogni qualvolta inseriamo un nuovo elemento, questo riceve una posizione numerica; il primo elemento avra’ posizione 0 (PHP viene definito un linguaggio di programmazione zero-based) e gli altri seguiranno in maniera crescente. Questo numero, che indica la posizione degli elementi, si chiama indice.
L’array associativo ha una differenza fondamentale rispetto all’array semplice: ad ogni elemento non viene più assegnato un numero ma una sua “caratteristica” detta “chiave” e, proprio in base a questa, prenderà posto all’interno dell’array in ordine di arrivo (inserimento). Questo tipo di array è noto anche come “array chiave-valore” e la chiave in questione sarà sempre una stringa.
PHP Object
Un oggetto e’ un tipo di dato che ci permette di descrivere un nuovo elemento partendo dalle sue caratteristiche.
Ad esempio, se creiamo un oggetto che identifica una persona, questo avra’ come caratteristiche quelle che identificano, appunto, una persona: nome, cognome, eta’, altezza, colore di capelli, ecc..
Queste caratteristiche possono essere definite dal developer in modo da descrivere al meglio il dato che vuole rappresentare.
Gli oggetti, a differenza degli altri tipi di dato, possono implementare delle funzioni: delle vere e proprie azioni che caratterizzano il comportamento del dato che stiamo creando.
Un oggetto che definisce una Persona, ad esempio, puo’ implementare una funzione che gli permette di dire il suo nome, il suo cognome e la sua età.