Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile
Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile

Guide per aspiranti programmatori

Lezione 6 / 26

Operatori e dati truthy & falsy in PHP

Caratteristica comune a tutti i linguaggi di programmazione – e, dunque, propria anche di PHP – oltre alle variabili, è quella degli operatori
Potremmo immaginare un operatore come una piccola scatola magica in cui inseriremo qualcosa – i nostri operandi – e ne tireremo fuori qualcosa di diverso rispetto a quello che abbiamo inserito – il nostro risultato -. 

Gli operatori, quindi, eseguono un’operazione avendo a disposizione degli operandi.

Ne analizzeremo tre tipologie:

  1. operatori matematici
  2. operatori di confronto
  3. operatori logici

 

Operatori matematici in PHP

Gli operatori matematici agiscono su uno o più operandi e restituiscono un valore numerico.
Questi operatori, dunque, richiamano le operazioni matematiche che rappresentano:

  • il + per l’addizione
  • il per la sottrazione 
  • il * per la moltiplicazione 
  • il / per la divisione
  • il % per il modulo
  • il ** per l’esponenziale.

Vediamoli all’opera su due operandi che, per noi, saranno:

$a=5
$b=2

Addizione (somma degli operandi)

Usando questo operatore matematico verra’ eseguita la somma tra i valori dati al momento dell’inizializzazione delle variabili  (in questo caso 5 + 2 darà come risultato 7)

Sottrazione (Differenza fra gli operandi)

$a-$b significa che stiamo letteralmente attuando la sottrazione 5-2 e quindi il risultato sarà 3

Moltiplicazione (Prodotto fra operandi)

in maniera analoga, $a*$b ci restituirà come risultato il 10 (perchè 5*2=10)

Divisione (Quoziente fra operandi)

$a/$b significa che stiamo effettivamente dividendo 5 per 2 e ci restituirá un numero in virgola mobile che corrisponde al suo risultato, cioè 2.5 (ricordiamo che in php la virgola mobile sui numeri si indica con un punto).

Modulo (Resto degli operandi)

Quando parliamo di modulo ci riferiamo al resto degli operandi. Il resto è la quantità “avanzata” dopo aver effettuato la divisione, cioè quella quantità che non è stato possibile dividere affinché il risultato coincidesse con un numero intero. Con $a%$b vogliamo sapere quanto è avanzato dalla divisione di 5 con 2.
Il due “entra nel 5” per due volte, e lo scarto ottenuto è 1; il resto della divisione di 5 con 2 é, quindi, 1. E questo sarà esattamente il risultato del nostro modulo.

Esponenziale (a elevato alla potenza di b)

Quando vogliamo moltiplicare un numero tante volte per se stesso, è best practice non utilizzare l’operatore moltiplicazione, ma l’esponenziale. 
Questo perché, ad esempio, 5*5*5*5*5 equivale a scrivere 5 elevato alla potenza di 5.

Tornando, quindi, ai nostri due operandi, con $a**$b stiamo elevando 5 alla potenza di 2 (potremmo, anche, dire “cinque alla seconda”). Questo equivale a scrivere 5×5, con risultato pari a 25.

Proviamo, ora, ad utilizzare i nostri operatori matematici in PHP.

<?php
   $x = 5;
   $y = 2;
   var_dump( $x + $y);
   var_dump( $x - $y);
   var_dump( $x * $y);
   var_dump( $x / $y);
   var_dump($x % $y);
?>

Il nostro output sará:

Nb. Abbiamo usato, nell’esempio, una funzione di php (var_dump) che ci consente di vedere in output anche il tipo di dato così da avere una visione piú chiara dei risultati.
Non preoccuparti, parleremo delle funzioni di php nel dettaglio nelle prossime guide, cosicché tu possa imparare php in maniera chiara e graduale.

 

Operatori di confronto in php

Gli operatori di confronto agiscono su due operandi e restituiscono un valore booleano (ovvero, un valore che può essere vero o falso: ricordi?).
Immaginiamo di avere come operandi un triangolo ed un cubo. 
Facciamoci, ora, una serie di domande.

Il triangolo è uguale al cubo? Assolutamente falso!
Il triangolo è diverso dal cubo? Senza dubbio vero!
Il triangolo è piú grande del cubo? Se notiamo esserlo, la risposta sarà, ovviamente, vero.

Quelle che possono sembrare ovvietà, applicate al mondo della programmazione informatica, assumono una certa importanza.

Usciamo dalla metafora e proviamo a considerare due operandi $c e $d per analizzare nel dettaglio tutti i nostri operatori di confronto.

Uguale ( == )
 
$c == $d restituisce TRUE se $c é uguale a $d, FALSE in caso contrario

Identico ( === )
$c === $d restituisce TRUE se $c é uguale a $d, e sono anche dati dello stesso tipo, FALSE altrimenti

Estremamente importante è la differenza tra == e ===:

== fa un controllo se i due operandi sono uguali in valore.
=== fa un controllo se i due operandi sono uguali in valore ma anche in tipo di dato.

Saltiamo nuovamente nella nostra metafora! Non abbiamo più, però, a che fare con un cubo e un triangolo. Questa volta, i nostri operatori saranno due cubi: uno di pietra e uno di plastica. 
Il primo operatore, quindi, restituirà TRUE poiché si tratta effettivamente di due cubi: il loro valore è uguale. 
Il secondo operatore restituirà, invece, FALSE perché i due cubi sono composti da materiali diversi: uno è fatto di pietra, l’altro di plastica. Due tipologie diverse. Chiaro adesso?

Non identici ( !== )

$c !== $b restituisce TRUE se $c non é uguale in valore a $b, e non sono neppure dello stesso tipo, FALSE in caso contrario. Cominci a capire il meccanismo?

Non uguali ( != )

$c != $d restituisce TRUE se $c non é uguale a $d, FALSE altrimenti

Esiste anche un’altra sintassi per controllare se due operandi sono non uguali ed è $c <> $d 

Minore di ( < )

$c < $d restituisce TRUE se $c é piú piccolo di $d, FALSE altrimenti

Maggiore di ( > )

$c > $d restituisce TRUE se $c é piú grande di $d, FALSE altrimenti

Minore o uguale ( <= )

$c <= $d restituisce TRUE se $c é piú piccolo o uguale a $d, FALSE altrimenti

Maggiore o uguale ( => )

$c >= $d restituisce TRUE se $c é piú grande o uguale a $d, FALSE altrimenti

Proviamoli in php:

<?php
   $c = 20;
   $d = 10;
   var_dump( $c == $d);
   var_dump( $c != $d);
   var_dump( $c <> $d);
   var_dump( $c < $d);
   var_dump( $c > $d);
   var_dump( $c <= $d);
   var_dump( $c >= $d);
?>

Il nostro output sará:

Facciamo, ora, degli altri esempi:

<?php
   $a = 10;
   $b = "10";
   var_dump( $a == $b); //true perché in valore i due numeri sono uguali
   var_dump( $a === $b); //false perché i due numeri sono uguali in valore MA NON IN TIPO
   var_dump( $a != $b); //false perché in valore i due numeri sono uguali
   var_dump( $a !== $b); //true perché i due numeri sono uguali in valore MA NON IN TIPO
?>

Il nostro output sará:

Come puoi notare, nell’ultimo esempio le due variabili sono di tipo differente: una è un numero e una è una stringa. 

Potremmo, tuttavia, applicare anche delle operazioni, poiché php riconosce una stringa numerica: analizza, cioè, partendo da sinistra, carattere per carattere e se riconosce un numero, lo userá come numero effettivo; se identifica, peró, immediatamente dopo, un carattere ci ritornerà un errore.

Vediamo direttamente degli esempi in php:

<?php
   $a = 10;
   $b = "10";
   echo "PRIMO RISULTATO \n";
   echo $a + $b;
   echo "\n";

   $a = 10;
   $b = "10ciao";
   echo "SECONDO RISULTATO \n";
   echo $a + $b;
   echo "\n";

   $a = 10;
   $b = "ciao10";
   echo "TERZO RISULTATO \n"
   echo $a + $b;
?>

l’output sarà:

Osserviamo.

Il primo risultato è la normale somma; 
nel secondo PHP ci mostra un avviso, ma in qualche modo riesce comunque a restituirci una somma.
Nel terzo, invece, abbiamo proprio un fatal error. 

 

Operatori logici in PHP

Prima di definire che cosa sono gli operatori logici e vederli in azione, occorre precisare due concetti molto importanti.
Stiamo parlando dei concetti di dato truthy e dato falsy.

 

Dati truthi in PHP

Un dato è definibile truthy quando è quantificabile e contiene un valore non nullo.
Alcuni esempi possono essere:

Numeri diversi da zero;
Stringhe non vuote;
Array non vuoti (esempio: [3,’D’,2.3,”Ciao”]);
Il valore booleano True.

 

Dati falsy in PHP

Un dato è falsy, invece, quando contiene un valore nullo o non quantificabile. Ad esempio:

0;
Stringa vuota;
Array vuoto (esempio []);
Il valore booleano False.

Alcuni esempi in php:

<?php
   var_dump((bool) ""); // false
   var_dump((bool) " "); //true
   var_dump((bool) 1); //true
   var_dump((bool) -2); //true
   var_dump((bool) "foo"); //true
   var_dump((bool) 2.35); //true
   var_dump((bool) [12]); //true,
   var_dump((bool) []); // false
   var_dump((bool) "false"); //true
?>

Il nostro output:

Ciò detto, possiamo tornare ai nostri operatori logici.
Gli operatori logici agiscono su due operandi e restituiscono un valore booleano True o False e sono:

  •  AND la cui sintassi è la doppia “e commerciale” &&
  •  OR si indica con doppio “pipe”, chiamato anche “barra verticale” || 
  •  NOT  si indica con il punto esclamativo !

L’operatore AND ritorna true SE E SOLO SE entrambi gli operandi sono valori truthy.

Esempio in php:

<?php
   var_dump(true && true);   //true
   var_dump(true && false);  //false
   var_dump(false && true);  //false
   var_dump(false && false);  //false
?>

Il nostro output:

L’operatore OR ritorna true SE ALMENO UNO degli operandi è un valore truthy.

Esempio in php:

<?php
   var_dump(true || false); //true
   var_dump(false || true); //true
   var_dump(true || true);   //true
   var_dump(false || false);  //false
?>

Il nostro output

L’operatore NOT ritorna il booleano inverso.
Per esempio, applicato a un valore truthy ritornerà false e viceversa.

Esempio in php:

<?php
   var_dump(!true); //false
   var_dump(!false); //true
?>

Il nostro output:

 

ATTENZIONE

Gli operatori && e || hanno una peculiaritá da non sottovalutare.
Consideriamo le regole appena viste, che prevedono che l’AND sia vero SE E SOLO SE entrambi gli operandi sono veri e l’OR sia vero se ALMENO UNO DEI DUE é vero.. Come avviene l’esecuzione della valutazione? Essa avverrà da sinistra verso destra.
Capiamo insieme come.

Supponiamo di avere i nostri due operatori che, questa volta, saranno due mele.
Chiediamoci: sono mele gialle? La risposta sará si se entrambe sono gialle. 

Come farà il nostro operatore and a capirlo? Semplice: controllerà se la prima mela è gialla, e poi dovrà controllare se anche la seconda lo è. 
Nel caso in cui la prima fosse, ad esempio, verde sarebbe inutile per lui controllare la seconda, che potrebbe a quel punto essere di qualsiasi altro colore: all’operatore non interesserà, poiché la risposta sarà già “le mele non sono entrambe gialle”. Il valore ritornato, dunque, sarà false.

Una delle due mele é gialla?
Se una delle due mele é effettivamente gialla, la risposta sará si. Ma sarà il nostro operatore or a capirlo. Come? Controllerà la prima mela, e, se questa sarà gialla l’operatore non avrà necessità di controllare la seconda: una delle due è del colore che cerca. Se, invece, la prima mela non dovesse essere gialla, l’operatore or dovrebbe, per forza di cose, andare a controllare la seconda. A quel punto la risposta sarà “true” se la seconda mela è del colore che l’operatore cerca, e “false” in caso contrario. 

È chiaro, dunque, cosa succede quando utilizziamo l’and (&&) o l’or (||)? 
Ribadiamolo: viene valutato il primo dato e, se è possibile capire se la risposta è vera o falsa sin dal primo controllo, il secondo dato non verrà considerato; se, peró, il controllo del primo dato non è sufficiente a darci una risposta, allora verrá valutato e considerato il secondo.

Alcuni esempi in php:

<?php
   var_dump(5 && "pippo"); //TRUTHY && TRUTHY
   var_dump(" " && 0); //TRUTHY && FALSY
   var_dump(null && true); //FALSY && TRUTHY
   var_dump([] && ""); //FALSY && FALSY
?>
  • A riga 2 sono stati valutati entrambi i dati
  • A riga 3 sono stati valutati entrambi i dati
  • A riga 4 è stato valutato solo il primo
  • A riga 5 è stato valutato solo il primo

Il nostro output

Qualche ulteriore esempio in php:

<?php
   var_dump(5 || "pippo"); //TRUTHY && TRUTHY
   var_dump(true || 0); //TRUTHY && FALSY
   var_dump("" || [12]); //FALSY && TRUTHY
   var_dump("" || 0); //FALSY && FALSY
?>
  • A riga 2  è stato valutato solo il primo
  • A riga 3 è stato valutato solo il primo
  • A riga 4 sono stati valutati entrambi i dati
  • A riga 5  sono stati valutati entrambi i dati

Il nostro output

 

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.