2  Strutture di controllo

2.1 echo e print

echo e print sono costrutti del linguaggio usati per produrre output. I valori non testuali vengono convertiti in stringhe quando possibile.

  • echo accetta uno o più argomenti e non restituisce alcun valore;
  • print accetta un solo argomento e restituisce sempre 1.
<?php
echo "Ciao mondo!";
print "Ciao mondo!";

echo 123;

$messaggio = "Ciao mondo!";
echo $messaggio;

// echo può ricevere più argomenti separati da virgole.
echo "Nome: ", "Mario", "<br>";
?>

Nelle stringhe delimitate da virgolette doppie PHP sostituisce il nome di una variabile con il suo valore. Le parentesi graffe delimitano il nome quando subito dopo sono presenti altri caratteri.

<?php
$numero = 45;
$veicolo = "autobus";
echo "Questo $veicolo ha una capacità di $numero passeggeri";

$memoria = 256;
echo "Il mio computer ha {$memoria} MByte di RAM";
?>
AvvisoInterpolazione delle variabili

L’interpolazione funziona nelle stringhe delimitate da virgolette doppie, non in quelle delimitate da apici singoli.

2.2 var_dump() e print_r()

Le funzioni var_dump() e print_r() sono utili durante il debug:

  • var_dump() mostra tipo e valore;
  • print_r() mostra il contenuto in forma leggibile, soprattutto per gli array.
<?php
$numero = 39;
var_dump($numero); // int(39)

$colori = ["blu", "rosso"];
print_r($colori);
/*
Array
(
    [0] => blu
    [1] => rosso
)
*/
?>
NotaStrumenti di sviluppo

Queste funzioni sono adatte al debug durante lo sviluppo. In un’applicazione pubblicata non dovrebbero mostrare agli utenti informazioni interne o dati sensibili.

2.3 La selezione con if

L’istruzione if valuta un’espressione booleana. Se la condizione è true, esegue il primo blocco; altrimenti può eseguire il blocco else.

<?php
if (<condizione booleana>) {
    <istruzioni eseguite se la condizione è true>
} else {
    <istruzioni eseguite se la condizione è false>
}
?>

Un esempio completo:

<?php
$eta = 17;

if ($eta >= 18) {
    echo "Maggiorenne";
} else {
    echo "Minorenne";
}
?>

Per verificare più casi si utilizza elseif:

<?php
$voto = 8;

if ($voto < 6) {
    echo "Insufficiente";
} elseif ($voto < 8) {
    echo "Buono";
} else {
    echo "Ottimo";
}
?>
AvvisoBlocchi e annidamento

Le istruzioni if, elseif ed else possono essere annidate. Le parentesi graffe rendono espliciti i blocchi e vanno usate anche quando contengono una sola istruzione.

2.4 La selezione multipla con switch

switch confronta il valore di un’espressione con diversi casi. break impedisce che l’esecuzione prosegua nei casi successivi.

<?php
$giorno = 2;

switch ($giorno) {
    case 1:
        echo "Lunedì";
        break;
    case 2:
        echo "Martedì";
        break;
    default:
        echo "Valore non valido";
}
?>
NotaConfronto usato da switch

switch effettua confronti non stretti, simili a ==. Quando è importante distinguere anche i tipi, può essere preferibile usare match, disponibile da PHP 8, oppure una sequenza di confronti con ===.

2.5 Il ciclo while

while ripete un blocco finché la condizione rimane vera. Se la condizione è falsa fin dall’inizio, il blocco non viene mai eseguito.

<?php
$numero = 10;

while ($numero > 5) {
    echo $numero . " ";
    $numero--; // Evita un ciclo infinito.
}
?>

2.6 Il ciclo do...while

do...while controlla la condizione dopo il blocco: le istruzioni vengono quindi eseguite almeno una volta.

<?php
$numero = 1;

do {
    echo $numero . " ";
    $numero++;
} while ($numero <= 5);
?>

2.7 Il ciclo for

for raccoglie nella sua intestazione l’inizializzazione, la condizione e l’aggiornamento della variabile di controllo.

<?php
for ($i = 1; $i <= 10; $i++) {
    $risultato = 5 * $i;
    echo $risultato . " ";
}
?>

I tre elementi vengono valutati in questo ordine:

  1. inizializzazione, una sola volta all’inizio;
  2. condizione, prima di ogni iterazione;
  3. aggiornamento, alla fine di ogni iterazione.

2.8 Il ciclo foreach

foreach è progettato per elaborare gli array. La forma completa rende disponibili la chiave e il valore dell’elemento corrente:

<?php
$voti = ["Mario" => 8, "Anna" => 9, "Luca" => 7];

foreach ($voti as $nome => $voto) {
    echo "$nome: $voto<br>";
}
?>

Se interessa solamente il valore si usa la forma abbreviata:

<?php
$numeri = [10, 20, 30];

foreach ($numeri as $numero) {
    echo $numero . " ";
}
?>

2.9 Esercizi

  1. Data una variabile numerica, stabilire se contiene un numero positivo, negativo oppure zero.
  2. Dato un voto da 1 a 10, stampare insufficiente, sufficiente, buono oppure ottimo usando if, elseif ed else.
  3. Usare switch per stampare il nome del giorno corrispondente a un numero da 1 a 7.
  4. Stampare i numeri da 1 a 20 prima con while, poi con do...while e infine con for.
  5. Stampare la tabellina di un numero da 1 a 10 usando un ciclo for.
  6. Dato un array di numeri, calcolare il minimo, il massimo e la media usando foreach, senza ricorrere direttamente alle funzioni min(), max() e array_sum().
  7. Dato un array associativo contenente nomi e voti, stampare solamente gli studenti con voto sufficiente.
AvvisoIstruzioni di consegna

Consegnare ogni esercizio in un file PHP diverso e numerato. Inserire tutti i file in una cartella denominata cognome_nome e consegnarla in formato compresso.