Corso base di Php - Lezione 2

Tipi di dati, scope delle variabili, operatori e stringhe.



[ZEUS News - www.zeusnews.it - 12-08-2008]

Tipi di dati

Iniziamo la seconda lezione parlando dei tipi di dati che Php è in grado di gestire. Php supporta 8 tipi di dati tra scalari e composti (o strutturati). I tipi scalari sono dati che possono essere ordinati in una sola dimensione come gli interi, i booleani, i numeri a virgola mobile e via dicendo. I tipi composti sono per esempio gli array e gli oggetti.

Di seguito la lista dei tipi:
1. boolean --> scalare: assume solo i valori true o false
2. intero --> scalare: numeri interi con segno
3. virgola mobile --> scalare: numeri in virgola mobile con segno
4. stringa --> scalare: una sequenza di caratteri
5. array --> composto: è una mappa che a ogni valore associa una chiave (o indice)
6. oggetto --> composto: può contenere proprietà e metodi
7. risorsa --> speciale: contiene un riferimento a una risorsa esterna come un gestore di un file aperto
8. null --> speciale: può contenere solo il valore null indicante che la variabile non contiene di fatto un valore.

Di norma, quando si lavora con Php, non serve convertire un tipo in un altro, ma a volte può tornare utile; potrebbe capitarci di dover prepare un output per un altro programma, oppure potremmo dover essere sicuri che il dato appartenga a un certo tipo. Esistono funzioni per impostare il tipo a una variabile oppure per capire a che tipo questa appartenga. Di seguito l'esempio spiega come scoprire il tipo di una variabile e poi come forzarlo in un altro:

<?php
   $miaVar = 123;   // la varibile è di tipo numerico (intero)
   print 'La variabile è di tipo ' . gettype($miaVar) . '<br/>';
   settype($miaVar,'string');   // Ora la varibile è una stringa
   print 'Ora la variabile è di tipo ' . gettype($miaVar);
?>

Per alcuni sarà prematuro, ma dobbiamo ora introdurre un operatore che agisce sulle stringhe: ".". Il punto serve a concatenare due stringhe e nell'esempio viene utilizzato per unire le stringhe di testo 'La variabile...' e 'Ora la variabile...' con l'output della funzione gettype(mixed $var) che data una variabile come parametro ritorna una stringa contenente il suo tipo. settype(mixed &$var,string $type) serve a settare il tipo $type alla variabile $var e ritorna true in caso di successo e false altrimenti. Naturalmente per maggiori approfondimenti vi invitiamo a consultare la documentazione sul sito ufficiale.

La libreria standard prevede un insieme di funzioni per stabilire se una variabile appartiene a un tipo specifico: is_string(...), is_int(...), e via dicendo.

Scope della variabile

Dopo aver definito una variabile, possiamo usarla nel nostro programma ma non ovunque: dipende da dove la definiamo. Di norma una variabile può essere utilizzata dal punto in cui viene definita in avanti, cioè dal punto in cui - di fatto - viene utilizzata per la prima volta. Però ci sono delle eccezioni, come nel caso delle funzioni. Le variabili definite all'interno di una funzione sono locali e possono essere usate solo in quell'ambito. Analizziamo il codice che segue:

<?php
   $miaVar=12;
   function func()
   {
      $miaVar='ciao a tutti!';
      print $miaVar . '<br/>';
   }
   func();
   print $miaVar;
?>

La variabile $miaVar fuori dalla funzione ha valore 12, mentre al suo interno abbiamo creato un'altra variabile $miaVar che contiene una stringa. Dentro func() vediamo la variabile "interna", mentra da fuori vediamo quella esterna; si dice che la variabile interna ha nascosto quella esterna. Quando la chiamata a func() termina, $miaVar (interna) viene distrutta: si parla quindi di variabile locale.

Occorre evidenziare una cosa importantissima (che verrà ripresa parlando delle funzioni): se all'interno di func() non avessimo definito $miaVar, la $miaVar esterna non sarebbe stata comunque raggiungibile senza un piccolo "trucco"; questa cosa in effetti non è molto piacevole, soprattutto per chi proviene dal linguaggio C o dal C++. In questi linguaggi, l'ambito di una variabile globale è appunto globale: se da una funzione vogliamo accedervi, dobbiamo poterlo fare. In Php per poter accedere alla $miaVar esterna avremmo dovuto procedere come segue:

<?php
   $miaVar=12;
   function func()
   {
      global $miaVar;
      print $miaVar . '<br/>';
   }
   func();
   print $miaVar;
?>

A questo punto, da dentro func() ci riferiamo alla variabile esterna; per cui la chiamata alla funzione e la print successiva produrranno lo stesso risultato: 12.

Possiamo anche definire costanti utilizzando la funzione define(...). Una costante di fatto è una variabile che, una volta inizializzata, non può essere cambiata; il suo scope è sempre globale. Il nome di una costante non inizia con $ e per il resto segue le stesse regole dei nomi delle variabili.

<?php
   define(COSTANTE,"12");
   print COSTANTE;
?>

Nel nostro esempio abbiamo definito una costante di nome COSTANTE che vale "12"; definendo il valore senza le virgolette, avremmo ottenuto una costante intera.

Operatori

Tramite gli operatori possiamo manipolare le variabili. Abbiamo a disposizione operatori aritmetici, di stringa, logici e altri che vedremo via via.

Il primo operatore che abbiamo incontrato finora è =. L'uguale serve ad assegnare a una variabile un valore, che può essere una costante o un'elaborazione complessa tra più variabili.

Distinguiamo in Php tre tipi di operatori:
1. unari
2. binari
3. ternari

Gli operatori unari agiscono su un solo operando: sono ++ e -- e possono precedere o succedere una variabile:

<?php
   ++$i;
   $x--;
   $k++;
?>

Vedremo più avanti come cambia il comportamento di questi operatori a seconda del contesto e se vengono posti prima o dopo la variabile su cui operano.

Gli operatori binari lavorano su due variabili: gli esempi più classici sono le quattro operazioni fondamentali (i matematici riconoscono solo due operazioni fondamentali, ma questa è un'altra storia).

<?php
   $x=4+1;
   $y=$x-3;
   $z=$x/$y;
   $k=$z*18;
?>

Ovviamante esistono anche altri operatori. L'unico operatore ternario che abbiamo è l'if aritmetico, che tratteremo più avanti; dal nome però capiamo che lavoreremo con tre operandi.

Definiamo qui in modo semplicistico il concetto di espressione: un'espressione è del codice che calcola un valore. Nella definizione rientra anche la semplice assegnazione, come:

<?php
   $x=6;
?>

Stringhe: operatori e funzioni

Trattiamo qui l'unico operatore che lavora sulle stringhe, il ".", e alcune funzioni che servono a manipolarle.

<?php
   $nome='Mario';
   $cognome='Rossi';
   $nomeIntero=$nome . ' ' . $cognome;
   print $nomeIntero;
?>

Abbiamo qui due variabili $nome e $cognome; la terza variabile, $nomeIntero, contiene la concatenazione delle due separate da uno spazio.

Abbiamo utilizzato sempre il carattere apice (') per racchiudere una stringa, ma Php prevede anche l'uso delle virgolette doppie (").

Il testo racchiuso tra due apici verrà mandato al browser così com'è, senza essere interpretato, a meno che non si tratti di alcuni codici di escape.

Se scrivessimo:

<?php
   $x=6;
   print 'La var vale $x';
?>

otterremo la scritta "La var vale $x". Utilizzando invece print "la var vale $x" otterremmo la scritta "La var vale 6". Si dice che l'apice produce un escaping parziale, mentre la virgoletta produce un escaping totale.

Nel caso che all'interno di una stringa tra apici debba comparire però l'apice, siamo costretti a proteggerlo tramite la seguente:

<?php
   $x='Stringa con dentro un \'';
?>

Lo stesso vale se dentro a una stringa tra virgolette volessimo scrivere una virgoletta:

<?php
   $x="Stringa con dentro una \"";
?>

All'interno delle virgolette, possiamo utilizzare caratteri di escape come "\n", "\t" e altri: questi producono rispettivamente un ritorno a capo e un tab in avanti di 4 spazi.

Attenti però; dovete ricordare che state producendo codice Html (o altro) e che nel browser non visualizzerete il tab o il ritorno a capo, ma questo avrà effetto sul sorgente Html generato. Se volete visualizzare un ritorno a capo nel browser dovrete usare <br/>.

Sconsigliamo l'uso dell'escaping totale sulle variabili, in quanto produce codice meno leggibile:

<?php
   $x='xxx';
   $y='yyy';
   print "la var x vale $x mentre y vale $y";
?>

è meno leggibile di

<?php
   $x='xxx';
   $y='yyy';
   print "la var x vale " . $x . " mentre y vale " . $y;
?>

Php mette a disposizione una serie di funzioni per manipolare le stringhe. Le più comuni sono strlen, strpos, substring e str_replace, che rispettivamente ritornano la lunghezza di una stringa, la posizione di una sottostringa, una sottostringa e una stringa con le ricorrenze di una sottostringa sostituite con un'altra. Alcuni esempi:

<?php
   $stringa='Io sono una stringa!';
   $len=strlen($stringa); // lunghezza
   $pos=strpos($stringa,'sono'); // prima occorrenza di sono
   // a partire da sinistra
   $substr=substr($stringa,10,4); // ritorna 4 caratteri
   // partendo dall'indice 10 (undicesimo carattere)
   $rep=str_replace('sono','mucche',$stringa);
   // sostituisce sono con mucche
   print $stringa . '<br/>';
   print $len . '<br/>';
   print $pos . '<br/>';
   print $substr . '<br/>';
   print $rep . '<br/>';
?>

Il primo carattere di una stringa ha indice 0 mentre l'ultimo ha indice strlen($stringa)-1. Esistono molte altre funzioni per gestire le stringhe: vi invitiamo ad approfondire la loro conoscenza sul sito di riferimento.

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato con Zeus News ti consigliamo di iscriverti alla Newsletter gratuita. Inoltre puoi consigliare l'articolo utilizzando uno dei pulsanti qui sotto, inserire un commento (anche anonimo) o segnalare un refuso.
© RIPRODUZIONE RISERVATA

Commenti all'articolo (0)


La liberta' di parola e' un diritto inviolabile, ma nei forum di Zeus News vige un regolamento che impone delle restrizioni e che l'utente e' tenuto a rispettare. I moderatori si riservano il diritto di cancellare o modificare i commenti inseriti dagli utenti, senza dover fornire giustificazione alcuna. Gli utenti non registrati al forum inoltre sono sottoposti a moderazione preventiva. La responsabilita' dei commenti ricade esclusivamente sui rispettivi autori. I principali consigli: rimani sempre in argomento; evita commenti offensivi, volgari, violenti o che inneggiano all'illegalita'; non inserire dati personali, link inutili o spam in generale.
E' VIETATA la riproduzione dei testi e delle immagini senza l'espressa autorizzazione scritta di Zeus News. Tutti i marchi e i marchi registrati citati sono di proprietà delle rispettive società. Informativa sulla privacy. I tuoi suggerimenti sono di vitale importanza per Zeus News. Contatta la redazione e contribuisci anche tu a migliorare il sito: pubblicheremo sui forum le lettere piu' interessanti.
Sondaggio
Hai inserito username e password della tua webmail. Il browser ti chiede se desideri salvare le credenziali di accesso per il futuro. Cosa fai?
Uso questa opzione perché è comoda, così non devo inserire ogni volta username e password
Clicco su No e disattivo l'opzione “Resta collegato”
Non accedo alla mail attraverso siti di webmail ma solo attraverso applicazioni installate sul dispositivo

Mostra i risultati (2028 voti)
Luglio 2025
Bollette gonfiate, le strategie illecite. Scandalo energetico in Italia
Eliza colpisce ancora
Fuga da Windows: in tre anni ha perso 400 milioni di utenti. Preferiti Android, Mac e Linux
Giugno 2025
Windows 10, aggiornamenti gratuiti per tutti. Ma ci sono requisiti da rispettare
Addio, vecchia carta d'identità: è obbligatorio passare alla CIE entro agosto 2026
16 miliardi di nomi utente e password finiscono online: coinvolti anche Facebook, Google e Apple
Tracciamento delle notifiche: ultima frontiera
Amazon stringe sui resi: la finestra scende da 30 a 14 giorni
Passare a Windows 11 è più semplice con Windows Migration. La fine di Windows 10 è già arrivata
WhatsApp, ecco perché stai ricevendo un messaggio che ti chiede di aggiungere l'indirizzo email
Richiamati oltre un milione di power bank: potrebbero surriscaldarsi fino a prendere fuoco
La Danimarca lascerà Windows e Microsoft Office, passando a Linux e LibreOffice
La macchina del caffè che fa a meno del serbatoio: estrae l'acqua dall'umidità dell'aria
In realtà i produttori fanno un favore agli utenti!
Il DNS europeo che promette di tutelare i dati personali
Tutti gli Arretrati
Accadde oggi - 6 luglio


web metrics