Come utilizzare echo, print, print_r e var_dump in PHP

In PHP è fondamentale l’utilizzo di echo, print, print_r e var_dump.

Infatti, quando si sviluppano siti web, blog, siti e-commerce e web app, questi elementi vanno utilizzati in casi specifici e in modo appropriato.

Il loro utilizzo parte dal mostrare strutture HTML, stringhe e numeri, risposte da endpoint per AJAX/REST-API o per analizzare tipi di dati, array e il contenuto delle variabili.

Quindi possiamo utilizzarli sia per uno scopo funzionale in ambito web o strutturale della pagina web HTML sia per uno scopo analitico per riconoscere il tipo di dato, la struttura delle variabili, nel caso di array di qualsiasi tipo (semplice, associativo o multidimensionale) e la loro lunghezza o dimensione (numero di caratteri, valore booleano o grandezza di un numero).

Ma è importante riconoscere quali elementi sono costrutti del linguaggio PHP e quali invece sono funzioni. I primi sono più veloci durante l’esecuzione di un programma, i secondi un po’ più lenti. Anche se questa differenza di tempo è veramente bassa.

Bisogna sapere che echo e print sono dei costrutti del linguaggio, mentre print_r e var_dump sono delle vere e proprie funzioni precostruite nel pacchetto del linguaggio PHP.

Echo

Echo è un costrutto del linguaggio PHP e serve a stampare, o a dare in output, il contenuto di una variabile. Durante la sua esecuzione in un programma non ha nessun valore di ritorno.

Ad esempio, se vogliamo mostrare su una pagina web il contenuto della variabile $nome possiamo usare echo:

<?php

$nome = "Michele";

echo $nome;

?>

Sulla pagina web verrà stampato il contenuto della variabile:

Michele

Questo è l’esempio di output di una stringa di testo. Con echo possiamo dare su schermo anche numeri interi o decimali:

<?php 

$int = 674;
$float = 5.68;

echo $int; 
echo "<br>";
echo $float; 

?>

Risultato:

674
5.68

Usando echo con un valore booleano “true” otteniamo il numero 1:

<?php

$booltrue = true;

echo $booltrue;

?>
1

Se proviamo a dare su schermo un valore nullo o un valore booleano “false” non otterremo alcun valore:

<?php

$boolfalse = false;
$nullvalue = null;

echo $boolfalse;
echo "<br>";
echo $nullvalue;

?>

Bisogna tenere a mente che il costrutto echo non è compatibile con la visualizzazione degli array, eseguendo questo codice otterremo un errore:

<?php

$array = [1, 2, 3, 4, 5, 6];

echo $array;    // ERRORE

?>

Per poter mostrare il contenuto di un array con echo bisogna prima convertirlo in una stringa. Questo possiamo farlo con la funzione implode()

<?php

// Il nostro array
$frutta = ["ananas", "kiwi", "banana", "melone", "anguria"];

// Convertiamo l'array in stringa con implode e un delimitatore (virgola) e visualizziamo una frase

echo "I miei frutti preferiti sono " . implode( ", ", $frutta ) . ".";

?>

Il costrutto echo è fondamentale per mostrare elementi HTML su una pagina web. Possiamo tenere una struttura HTML semplice o complessa in una variabile e poi visualizzarla oppure possiamo stamparla direttamente con echo:

<?php

// Inseriamo un titolo in una variabile
$titolo = "<h1>Titolo di benvenuto</h1>";

// Mostriamo il contenuto della variabile
echo $titolo;

// Mostriamo un paragrafo direttamente
echo "<p>Benvenuto sul mio sito web</p>";

?>

Proviamo a stampare una struttura più complessa, ad esempio una lista:

<?php

echo "<h2>Lista disordinata stampata da PHP con echo</h2>
           <ul>
               <li>Elemento lista 1</li>
               <li>Elemento lista 2</li>
               <li>Elemento lista 3</li>
           </ul>";

?>

Ecco un altro esempio di utilizzo del costrutto echo in una pagina HTML un po’ più strutturata:

<?php
    // Tag HEAD e HTML
    $lingua_sito = "it-IT";
    $titolo_sito = "Il mio primo sito web dinamico";

    // Contenuto sito (body)
    $titolo = "Benvenuti sul mio sito web";
    $paragrafo = "Naviga il nostro sito web per scoprire tutti i nostri servizi";
    $servizi = "<ul>
                    <li>Servizio 1</li>
                    <li>Servizio 2</li>
                    <li>Servizio 3</li>
                    <li>Servizio 4</li>
                    <li>Chi siamo</li>
                    <li>Contattaci</li>
                </ul>";
?>
<!DOCTYPE html>
<html lang="<?php echo $lingua_sito; ?>">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo $titolo_sito; ?></title>
</head>
<body>
    <h1><?php echo $titolo; ?></h1>
    <p><?php echo $paragrafo; ?></p>

    <?php echo "<br>"; ?>

    <?php echo $servizi; ?>

</body>
</html>

In PHP esistono dei tag per eseguire ciò che abbiamo fatto fin ora con <?php echo $variabile; ?>. Questi tag sono i seguenti:

<?= ?>

// Sono l'equivalente di <?php echo /* qualcosa da visualizzare */ ?>

Praticamente possiamo utilizzare <?= ?> con tutti gli esempi visti prima:

<?php 

$stringa = "Ciao, mi chiamo Michele";
$numero = 593;
$float = 58.4;

?>

<?= $stringa; ?>
<?= "<br>"; ?>
<?= $numero; ?>
<?= "<br>"; ?>
<?= $float; ?>
<?php 
    $titolo_pagina = "Il mio primo sito web";
    $titolo_intestazione = "Benvenuti sul mio primo sito web";
    $paragrafo = "Esplora il nostro sito per consultare tutti i servizi disponibili";
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?= $titolo_pagina; ?></title>
</head>
<body>
    <h1><?= $titolo_intestazione; ?></h1>
    <p><?= $paragrafo; ?></p>
</body>
</html>

Concatenare variabili, stringhe ed elementi HTML

Con il costrutto echo è possibile concatenare variabili, pezzi di stringa ed elementi HTML:

<?php

$nome = "Michele";
$cognome = "Mincone";
$professione = "Sviluppatore web e il web designer";
$eta = 21;

echo "<p>Il mio nome è " . $nome . " " . $cognome . ", ho " . $eta . " anni e di professione faccio lo " . $professione . "</p>";

?>

PHP elaborerà tutto il contenuto delle variabili e di ciò che abbiamo scritto in un’unica stringa che possiamo visualizzare sulla pagina web una volta visitata.

In questo caso verrà effettuata anche una conversione del tipo di dato. La variabile $eta contiene un numero intero che durante l’elaborazione della stringa con echo verrà convertita in stringa.

Questo meccanismo viene chiamato type juggling o conversione dei dati e viene attuato in modo opportuno in base al contesto e alla tipologia dei dati forniti.

Ora non è necessario che tu capisca a fondo questo meccanismo ma è fondamentale che tu capisca che è possibile concatenare le variabili con echo.

Echo con sintassi a parentesi tonde

Echo supporta anche la sintassi con le parentesi tonde:

<?php

$nome = "Michele";

echo($nome);

?>

Mostrare più di una variabile o valore con un solo costrutto echo

Possiamo visualizzare più di una variabile o valori con un solo costrutto echo utilizzando le virgole, questo non è da confondere con la concatenazione:

<?php 

$var1 = "Attività 1";
$var2 = "Attività 2";
$nome = "Michele";
$cognome = "Mincone";
$bool = TRUE;
$int = 67;
$float = 17.6949;

echo $var1, " ", $var2, " <br>",  $nome, " ", $cognome, "<br>", $bool, "<br>", $int, " ", $float;

?>

Ma c’è un’eccezione, questo non possiamo farlo con la sintassi di echo a parentesi tonde.

echo($var1, " ", $var2, " <br>",  $nome, " ", $cognome, "<br>", $bool, "<br>", $int, " ", $float);

L’unica soluzione per ottenere una stringa è la concatenazione usando il punto “.“.

Print

Anche print non è una funzione ma un costrutto del linguaggio PHP. A differenza di echo, print accetta un solo argomento e ritorna sempre 1 come valore.

Print ha una sintassi con parentesi e senza parentesi. Ecco alcuni esempi:

<?php

print "Il mio nome è Michele";

print "<br>";

print("Il mio nome è Michele");

?>

Quindi come abbiamo visto col costrutto echo, possiamo stampare stringhe, elementi HTML, numeri interi e decimali, valori booleani e gli array solo se li convertiamo in stringa. Quindi le modalità sono le stesse.

Vediamo velocemente un esempio con numeri interi e decimali:

<?php
$int1 = 953;
$int2 = 84;
$int3 = 9394;

$float1 = 67.35;
$float2 = 95.9693;
$float3 = 3.54;

print $int1;
print"<br>";
print $int2;
print"<br>";
print $int3;
print"<br>";
print $float1;
print"<br>";
print $float2;
print"<br>";
print $float3;
print"<br>";

?>

Il valore booleano TRUE da sempre 1, mentre valori booleani FALSE o valori nulli NULL non danno alcun elemento in output:

<?php

$booltrue = TRUE;
$boolfalse = FALSE;
$nullval = NULL;

print $booltrue;    // RISULTATO: 1
print "<br>";
print $boolfalse;   // NESSUN RISULTATO
print "<br>";
print $nullval;     // NESSUN RISULTATO

?>

Se inseriamo un array non otterremo il suo contenuto ma una parola chiave “Array“, ciò che verrà mostrato è solo la stringa prima della concatenazione “.“:

<?php

$frutti = ["mela", "kiwi", "ananas", "arancia", "melone"];

print "I miei frutti preferiti sono " . $frutti; 

?>

Risultato:

I miei frutti preferiti sono Array

Ciò che dobbiamo fare è convertire l’array con la funzione implode():

<?php

$frutti = ["mela", "kiwi", "ananas", "arancia", "melone"];

print "I miei frutti preferiti sono " . implode( ', ', $frutti); 

?>

Risultato:

I miei frutti preferiti sono mela, kiwi, ananas, arancia, melone

È fondamentale capire che con il costrutto print possiamo solo concatenare più valori e variabili con il punto, ma non ne possiamo mostrare più di uno usando la virgola (cosa che potevamo fare con echo):

<?php

// Utilizzo corretto di print

$nome = "Michele";
$cognome = "Mincone";

print "Il mio nome è " . $nome . " " . $cognome;
print "<br>";
print("Il mio nome è " . $nome . " " . $cognome);
print "<br>";
print $nome;
print "<br>";
print ($cognome);

// Utilizzo SCORRETTO di print

print($nome, $cognome);
print "<br>"; // Questa riga è corretta
print $nome, $cognome;
print "<br>"; // Anche questa
print "Il mio nome è ", $nome, " ", $cognome;

?>

Print_r()

Print_r() è una funzione, quindi non è un costrutto. Quindi dobbiamo per forza utilizzare le parentesi tonde.

<?php 

print_r("Visualizzami");    // CORRETTO

print_r "Visualizzami";    // SCORRETTO, ERRORE!!!

?>

Possiamo utilizzarlo nel modo in cui abbiamo utilizzato echo e print prima: mostrare stringhe, numeri interi e decimali e valori booleani.

<?php 

$nome = "Michele";
$cognome = "Mincone";
$bool = TRUE;
$int = 67;
$float = 17.6949;

print_r($nome);    // Michele
print_r("<br>");
print_r($cognome);    // Mincone
print_r("<br>");
print_r($bool);    // 1
print_r("<br>");
print_r($int);    // 67
print_r("<br>");
print_r($float);    // 17.6949

?>

La differenza con echo e print è che possiamo mostrare l’intero contenuto di un array senza dover effettuare alcuna conversione. Infatti, la funzione print_r() è specifica per analizzare il contenuto degli array semplici, associativi e multidimensionali.

Ecco un esempio con un array semplice:

<?php

$array = [1, 2, 3, 4, 5, 6];

print_r( $array );

?>

Il risultato che otteniamo è il seguente:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )

All’inizio abbiamo la parola chiave Array che indica il tipo di dato, che è per l’appunto un array.

Poi tra parentesi tonde abbiamo tutti i singoli elementi dell’array con il valore della chiave tra parentesi quadre e il valore di quella chiave dopo la freccia =>.

Ad esempio in “[0] => 1“, “[0]” è la chiave mentre “1” è il valore.

Quindi è chiaro che l’utilizzo della funzione print_r() risulti molto utile per individuare la chiave di un Array per ottenere il valore desiderato.

Infatti, se proviamo ad accedere a un valore di un array tramite la sua chiave otteniamo proprio quel valore:

<?php

$array = [1, 2, 3, 4, 5, 6];

echo $array[0];
echo "<br>";
echo $array[1];

// e così via...

?>

Migliorare la leggibilità di un Array con i tag HTML <pre>

Proviamo a migliorare la leggibilità quando analizziamo un array con la funzione print_r sfruttando i tag HTML <pre></pre>:

<?php

$array = [1, 2, 3, 4, 5, 6];

echo "<pre>";
print_r( $array );
echo "</pre>";

?>

Risultato:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)

Analisi array associativo

Analizzare il contenuto di un array associativo può risultare difficoltoso, ma sfruttando la funzione print_r() tutto diventa molto più semplice specie con i tag <pre>.

Realizziamo un array associativo, elemento che potrebbe provenire anche dal database o da un’API, e analizziamolo:

<?php 

$array_associativo = array(
    "nome" => "Michele",
    "cognome" => "Mincone",
    "eta" => 21,
    "professione" => "Sviluppatore web e web designer",
    "hobby" => "tantissimi",
    "piatto_preferito" => "carbonara",
    "bevanda_preferita" => "coca cola",
    "animale_preferto" => "cane",
);

echo "<pre>";
print_r( $array_associativo );
echo "</pre>";

?>

Risultato:

Array
(
    [nome] => Michele
    [cognome] => Mincone
    [eta] => 21
    [professione] => Sviluppatore web e web designer
    [hobby] => tantissimi
    [piatto_preferito] => carbonara
    [bevanda_preferita] => coca cola
    [animale_preferto] => cane
)

Come prima cosa ci viene indicato il tipo di dato con la scritta Array. Come prima, abbiamo tra parentesi tonde tutti i singoli elementi dell’array.

Dopodiché ritroviamo le chiavi tra parentesi quadre: [nome], [cognome], [eta] eccetera… Indicazione molto utile per ottenere i rispettivi valori.

Dopo la freccia => abbiamo il valore di quella chiave.

Analisi array multidimensionale

Come programmatore back-end PHP devi sapere che gli array possono diventare molto complessi e la funzione print_r() è molto utile per sapere quale percorso dobbiamo fare per accedere a determinati dati.

Ecco un esempio:

<?php

$array_multidimensionale = [
    'nome' => 'Michele',
    'cognome' => 'Mincone',
    'eta' => '21',
    'professione' => 'Sviluppatore web',
    'hobby' => ['robotica', 'elettronica', 'chimica', 'fai da te', 'meccanica'],
    'social' => ['instagram', 'youtube', 'tiktok', 'linkedin'],
    'linguaggi' => ['php', 'js', 'html', 'css', 'python', 'sql', 'c++'],
    [
        'github' => 'https://github.com/mikeisadev',
        'sito_web' => 'https://michelemincone.com',
        'linguaggio_preferito' => 'Javascript',
        [
            'numeri_preferiti' => [3, 6, 9, 12, 15, 17, 18, 21],
            [
                'generi_preferiti_libri' => [
                    'fantasy',
                    'scienza',
                    'meccanica',
                    'chimica',
                    'robotica',
                    'avventura',
                    'narrativa'
                ],
                'libri_letti' => 27
            ]
        ]
    ]
    ];

echo "<pre>";
print_r( $array_multidimensionale );
echo "</pre>";

?>

Risultato:

Array
(
    [nome] => Michele
    [cognome] => Mincone
    [eta] => 21
    [professione] => Sviluppatore web
    [hobby] => Array
        (
            [0] => robotica
            [1] => elettronica
            [2] => chimica
            [3] => fai da te
            [4] => meccanica
        )

    [social] => Array
        (
            [0] => instagram
            [1] => youtube
            [2] => tiktok
            [3] => linkedin
        )

    [linguaggi] => Array
        (
            [0] => php
            [1] => js
            [2] => html
            [3] => css
            [4] => python
            [5] => sql
            [6] => c++
        )

    [0] => Array
        (
            [github] => https://github.com/mikeisadev
            [sito_web] => https://michelemincone.com
            [linguaggio_preferito] => Javascript
            [0] => Array
                (
                    [numeri_preferiti] => Array
                        (
                            [0] => 3
                            [1] => 6
                            [2] => 9
                            [3] => 12
                            [4] => 15
                            [5] => 17
                            [6] => 18
                            [7] => 21
                        )

                    [0] => Array
                        (
                            [generi_preferiti_libri] => Array
                                (
                                    [0] => fantasy
                                    [1] => scienza
                                    [2] => meccanica
                                    [3] => chimica
                                    [4] => robotica
                                    [5] => avventura
                                    [6] => narrativa
                                )

                            [libri_letti] => 27
                        )

                )

        )

)

Come vedi risulta davvero semplice poter analizzare ogni singolo elemento di questo array.

Immagina di avere array molto più complessi di questo, print_r() è una funzione che ti salverà molto tempo durante l’analisi.

Var_Dump

Var_dump() è una funzione come print_r(). Ma var_dump() ha un vantaggio in più con tutti i tipi di dati.

Infatti questa funzione ci mostrerà il tipo di dato del valore che gli abbiamo dato e ci mostrerà anche la lunghezza o la grandezza di quest’ultimo.

Ti mostro un esempio con una stringa:

<?php

$nome= "Michele";

var_dump($nome);

?>

Otteniamo questo:

string(7) "Michele"

La parola “string” è il tipo di dato del valore della variabile $nome. Infatti, si tratta di una semplice stringa di testo.

Tra parentesi tonde abbiamo un numero “(7)” che indica il numero di caratteri della stringa e alla fine abbiamo il valore vero e proprio della variabile $nome.

Facciamo lo stesso esempio con numeri interi e decimali e valori booleani:

<?php

$int1 = 854;
$int2 = 859399;
$float1 = 59.595;
$float2 = 3.593;
$bool1 = true;
$bool2 = false;

var_dump($int1);
echo "<br>";
var_dump($int2);
echo "<br>";
var_dump($float1);
echo "<br>";
var_dump($float2);
echo "<br>";
var_dump($bool1);
echo "<br>";
var_dump($bool2);
echo "<br>";

?>

Risultato:

int(854)
int(859399)
float(59.595)
float(3.593)
bool(true)
bool(false)

I numeri interi sono tipi di dati indicati con la parola “int“. Tra parentesi tonde, la funzione var_dump(), ci dà direttamente il numero contenuto nelle variabili $int1 e poi $int2.

Questo numero è inteso come la sua dimensione.

Lo stesso discorso vale per i numeri decimali che vengono indicati con “float” e il valore del numero tra parentesi tonde. I valori booleani vengono indicati con “bool” e il rispettivo valore true o false tra parentesi tonde.

Var_dump è ancor più utile con gli array proprio perché abbiamo il rilevamento del tipo di dato:

<?php

$array = [1, 2, 3, 4, 5, 6];

echo "<pre>";
var_dump( $array );
echo "</pre>";

?>

Risultato:

array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
}

All’inizio abbiamo la parola chiave array, quindi ci indica il tipo di dato della variabile $array, con un numero tra parentesi che riporta il conteggio degli elementi dentro la lista.

Poi tra parentesi quadre abbiamo la chiave di ogni valore e dopo la freccia “=>” abbiamo il riferimento al tipo di dato, quindi abbiamo tutti numeri interi “int” e tra parentesi il numero stesso, quindi il valore.

Con var_dump possiamo analizzare anche array associativi o multidimensionali oppure il contenuto di funzioni o classi.

Ho trattato nello specifico questa funzione in un articolo dedicato introducendo molti esempi:

  • La funzione var_dump e PHP nell’analisi dei dati: stringhe, numeri, decimali, array, funzioni e classi [link]

Il ruolo di “return” in PHP e differenze

In questo articolo abbiamo visto che echo, print, print_r e var_dump servono per visualizzare elementi in una pagina web.

Ma che funzione e quale ruolo ha il costrutto return in PHP?

Con return puoi:

  • interrompere l’esecuzione di un programma alla riga in cui viene inserito
  • ritornare un valore specifico, ad esempio da una funzione

Alcuni esempi

Vedremo meglio il costrutto return in un articolo specifico.