Programmare in PHP: introduzione alla sintassi

PHP, come tutti i linguaggi di programmazione, ha delle proprie regole di sintassi. Seguirle durante la scrittura di un programma è fondamentale per evitare di generare errori.

Prima di iniziare con il tutorial sulla sintassi è bene ricordare, specie per chi è alle prime armi, che il codice PHP viene eseguito sul server elaborando il documento HTML, richiesto dall’utente, che viene poi restituito al browser.

Se non dovessi capire uno o più concetti leggendo questo articolo non è un problema. Fa parte del gioco di imparare un linguaggio di programmazione. Ci ritorneremo più volte negli articoli successivi.

Iniziamo!

Scrivere e inserire codice PHP

Per scrivere codice PHP è fondamentale che questo sia scritto tra i suoi tag caratteristici:

<?php // Tag di apertura php

// Qui scrivi tutto il tuo codice

// Tag di chiusura php ?>

Per capirci meglio, è un po’ come il linguaggio di markup HTML nel quale per identificare una parte di documento utilizzi dei tag specifici per determinare un elemento:

<!-- Questa è una lista non ordinata -->
<ul>
    <li>Questo è un elemento lista</li>
    <li></li>
</ul>

<!-- Oppure, questo è un titolo -->
<h1>Titolo primario</h1>

Per farti un esempio diretto, proviamo a stampare del testo con del codice PHP con il costrutto echo:

<?php 
// Apertura  tag PHP

// Il nostro codice
echo "Il mio primo script PHP!";

// Chiusura tag PHP
?>

Quindi, ogni volta che dovrai scrivere del codice PHP dovrai per forza inserirlo all’interno dei tag di apertura e chiusura <?php // codice ?>.

Nota bene: il costrutto echo serve a dare in output o a mostrare su schermo il dato o il testo che inseriamo subito dopo.

Questo perché l’interprete PHP deve riconoscere qual è il codice che deve processare.

Nella sintassi PHP esistono dei tag di apertura e chiusura particolari che includono il costrutto echo:

<?= "stringa di testo da mostrare su schermo"; ?>

Questo codice qui sopra è l’equivalente di questo qui sotto:

<?php echo "stringa di testo da mostrare su schermo"; ?>

I tag <?= ?> sono molto utili per completare parti di frasi o di testo all’interno di un documento HTML:

In questo tutorial <?= "vediamo la sintassi base di PHP"; ?> facendo alcuni esempi basilari <?php echo "per me che sono un principiante"; ?>

Detto questo ti faccio un altro esempio di come si incorpora PHP nell’HTML.

Di base devi sapere che PHP può effettuare tantissime azioni: fare calcoli, inviare email, collegarsi al database e fare varie operazioni con esso e su di esso, fare loop, memorizzare variabili, eseguire funzioni e tantissimo altro ancora…

Il PHP serve anche a elaborare pagine HTML dinamiche, ad esempio:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php 
    // Qui includo il mio codice PHP e faccio ciò che voglio

    // Aggiungo un titolo H1
    echo "<h1>Il mio titolo</h1>";

    // Aggiungo un paragrafo
    echo "<p>Il mio paragrafo</p>";

    // Aggiungo un pulsante
    echo "<button>Il mio pulsante</button>";
    ?>
</body>
</html>

All’interno di una struttura classica di una pagina HTML, inserisco il mio codice PHP all’interno dei tag <body></body>.

Quindi in PHP vado a generare gli elementi che voglio, nel mio caso ho messo un titolo <h1></h1>, un paragrafo <p></p> e un pulsante <button></button>.

Potevo benissimo effettuare altre operazioni in PHP: calcoli, inviare email, connettermi al database, fare loop e tantissimo altro ancora….

Sapevi che per generare elementi HTML posso interrompere PHP con il tag ?>, inserire il tag HTML che voglio mostrare e riaprire il PHP con il tag <?php per continuare ciò che stavo facendo? Ecco un esempio:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php

    echo 2 + 2; // Un esempio di addizione in PHP

    // Interrompo PHP
    ?>
    <h1>Inserisco un titolo</h1>
    <?php 
    // Riapro PHP

    echo 2 / 2; // Un esempio di divisione in PHP

    // altro codice...
    ?>
</body>
</html>

Come vedi PHP è molto flessibile. Per generare il contenuto da mostrare sulla pagina web HTML posso aprire e chiudere i tag PHP in modo appropriato e svolgere tutte le operazioni che devo effettuare.

Quando scriverai i tuoi siti web in PHP, avrai dei file totalmente dedicati a contenere script PHP che non elaborano pagine intere.

Questi file possono tranquillamente iniziare col tag di apertura <?php omettendo quello di chiusura ?>, come qui sotto:

<?php
// Questo è un file con solo codice PHP, useremo le funzioni qui dentro su altre pagine

function esempio_funzione() {
    // esempio codice...
}

// altro esempio codice...

// non chiudo con il tag PHP

Di solito questi file sono inclusi in altri file per generare parti di contenuto nelle varie pagine di un sito. Ma vedremo meglio questo aspetto più avanti.

Distinzione tra maiuscole e minuscole in PHP

In PHP c’è una parziale distinzione tra maiuscole e minuscole. In inglese ci riferiamo a questa caratteristica con la parola keywords partially case sensitive (o parole parzialmente sensibili alle minuscole e alle maiuscole).

Ad esempio, la funzione count() verrà eseguita anche se viene scritta tutta in maiuscolo COUNT(). Oppure anche se viene scritta con l’iniziale maiuscola Count() o a casaccio CoUnT().

Lo stesso esempio vale per il costrutto echo, infatti puoi scriverla:

<?php 

ECHO "esempio";    // tutta maiuscola
Echo "esempio";      // iniziale maiuscola
eCHO "esempio";    // a caso
eChO "esempio";     // anche qui a caso

?>

Quindi i costrutti e le keyword di PHP non sensibili alle maiuscole o alle minuscole possono essere scritti con qualsiasi tipo di carattere. L’importante è che la keyword sia quella.

Altri esempi di questo tipo sono:

  • i costrutti per le strutture di controllo if, if-else, if-else if e case switch
  • i costrutti per i loop while, do while, foreach, for
  • i valori booleani true e false,
  • le funzioni definite dall’utente e i nomi delle classi,
  • altri esempi: null, array, class

Invece, i nomi delle variabili sono sensibili alle maiuscole e alle minuscole. Infatti, le seguenti variabili sono tutte diverse tra loro:

<?php

$nome = "Michele";

echo "Il mio nome è " . $nome;
echo "Il mio nome è " . $Nome;
echo "Il mio nome è " . $NoMe;
echo "Il mio nome è " . $NOME;

?>

Provando a eseguire questo codice vedrai che solo la prima frase verrà completata con il contenuto della variabile $nome, ottenendo un errore per le altre tre.

Questo perché la variabile $nome è completamente diversa dalle variabili $Nome, $NoMe e $NOME.

Costrutti del linguaggio PHP

Ogni linguaggio ha i propri costrutti. Ci riferiamo a un costrutto come a un insieme di parole chiave che l’interprete già conosce e quindi sa la loro funzione.

Esempi di costrutti del linguaggio PHP li ho già citati prima, elencandoli di nuovo sono:

  • echo,
  • if,
  • if – else,
  • if – else if,
  • case,
  • switch,
  • class,
  • extends,
  • while,
  • do-while,
  • for,
  • foreach,
  • endwhile,
  • endif,
  • list(),
  • match,
  • break,
  • isset(),
  • array()

Trovi tutti i costrutti di PHP su questa pagina.

I costrutti molto spesso somigliano a funzioni per sintassi. Ad esempio array(), echo(), print(), isset() o unset() sembrano funzioni ma non lo sono.

Un’altra cosa da sapere è che non puoi utilizzare i nomi dei costrutti per creare funzioni, costanti e classi come qui sotto:

<?php 

// Questa funzione darà un errore
function array() {
    // corpo funzione
}

// Definiamo una costante non valida
define('array', 'valore costante');

echo array; // Chiamando la costante otteniamo un errore

// Questa classe non è valida
new Class {
    public string $name = "Il mio nome";
}

$class = new Class();
echo $class->name;

<?php

Quindi per funzioni, costanti e classi utilizza nomi unici.

Dichiarazioni o statements

Un programma scritto in PHP implica che tu debba scrivere una serie di dichiarazioni, o statements, per effettuare tutte le azioni richieste per una specifica funzione di un sito.

Una dichiarazione può significare:

  • chiamare una funzione
  • assegnare un valore a una variabile
  • effettuare un calcolo
  • fare un loop
  • ecc.

L’importante è che tu segua una regola fondamentale di aggiungere il (;) punto e virgola a ogni dichiarazione.

<?php
$variabile1 = "Michele";
$variabile2 = "Programmatore";
$variabile3 = "Sportivo";
?>

Come vedi a ogni riga metto il (;) punto e virgola. Questo è fondamentale per permettere all’interprete PHP di riconoscere ogni singola riga da eseguire volta per volta.

Se hai seguito la mia serie su PHP sai bene che uno script PHP viene eseguito in ordine dalla prima riga fino all’ultima. Il punto e virgola è un delimitatore fondamentale.

Se non inserissi il (;) punto e virgola otterresti un errore di sintassi.

Ma ci sono delle eccezioni in cui il punto è virgola non va usato per ogni riga del codice.

Stiamo parlando di blocchi di codice che includono l’utilizzo delle parentesi graffe {}:

<?php
// Blocco condizionale o struttura di controllo
if ( fa_bel_tempo() ) {
    facciamo_una_passeggiata();
}
?>

Come vedi, metto il punto e virgola soltanto dopo la dichiarazione delle funzione e non dopo la chiusura della parentesi graffa.

Lo stesso vale per i loop, ad esempio:

<?php

$i = 0;
while ($i < 10) {
   echo $i;

   $i++;
}

?>

Metto il punto e virgola (;) dopo ogni dichiarazione tranne che dopo la chiusura o l’apertura delle graffe.

Un altro esempio ancora è quando abbiamo una sola dichiarazione tra tag di apertura e chiusura PHP:

<?php echo $variabile ?> // senza ;


<?php echo $variabile; ?> // con;

// Funzionano ugualmente perché si tratta di una sola dichiarazione!
// Se avessimo avuto più dichiarazioni avremmo dovuto usare ";"

Essendo la dichiarazione una sola, l’interprete riconosce subito la riga con il codice da eseguire.

Commenti in PHP

I commenti in PHP sono fondamentali per documentare il codice passo dopo passo o descrivere il meccanismo di una classe o di una funzione.

In PHP puoi scrivere un commento:

  • A una riga con i doppi slash //
  • Su più righe con /* */

Esempi:

<?php
// Commento su una linea
// Un altro commento

/*
Questo
è 
un 
commento
su più
linee
*/
?>

Variabili

Una variabile serve a conservare una o più valori di diverso tipo. Per definirla devi:

  • iniziare col simbolo del dollaro $,
  • inserire il nome della variabile subito dopo,
  • utilizzare l’operatore di assegnazione “=“,
  • inserire il valore desiderato.

Ad esempio la variabile $nome contiene il valore "Michele"

$nome = "Michele";

Oppure può contenere un numero:

$numero = 20;

Oppure ancora un array:

$colori = ["blu", "verde", "giallo", "rosso"];

Stringhe, numeri e array sono soltanto alcuni tipi di dati che una variabile può contenere. Più avanti scopriremo altri tipi di dati.

Una caratteristica di PHP è che si tratta di un linguaggio a bassa tipizzazione, infatti non bisogna definire il tipo di dato per ogni variabile (cosa che si deve fare invece nel lingaggio C, C#, C++, Java o TypeScript).

Probabilmente avrai anche sentito parlare delle costanti. Le costanti differiscono dalle variabili perché il loro valore non può essere cambiato riassegnandone uno diverso durante l’esecuzione del programma.

Durante l’esecuzione di un programma è possibile riassegnare un valore diverso a una variabile:

<?php

$nome = "Michele";

$nome = "Gianluca";

$nome = "Giovanni";

Ma anche un tipo di dato diverso:

<?php

$variabile = "una stringa";    // Stringa

$variabile = 57;   // Numero

$variabile = [1, 2, 3, 4, 5];   // Array

Più avanti scopriremo di più su variabili e costanti.

Costanti

Le costanti, come le variabili, servono a contenere uno o più valori. Ma le costanti non possono cambiare il proprio valore durante l’esecuzione di un programma.

Per definire una costante utilizziamo il costrutto define e poi le parentesi tonde () inserendo prima il nome della costante e poi il suo valore:

<?php

// Definire una costante
define('NOME_COSTANTE', 'VALORE COSTANTE');

Posso usare il costrutto echo per dare su schermo il valore di una costante:

<?php

echo NOME_COSTANTE;   // Darà come risultato "VALORE COSTANTE"

Nelle costanti posso inserire anche numeri, array e altri tipi di dati.

Tipi di dati

All’interno di un programma dobbiamo poter distinguere un numero da una stringa di testo.

PHP, come ogni linguaggio di programmazione, sa riconoscere un numero da una stringa.

Un numero e una stringa sono due tipi di dati molto comuni. In inglese identifichiamo una stringa di testo con il termine string e un numero con il termine int (abbreviazione di “integer” che significa numero intero).

Abbiamo anche:

  • i valori booleani true e false a cui ci riferiamo col termine bool,
  • i valori nulli, ovvero quelli privi di valore, a cui ci riferiamo con il termine null,
  • i numeri decimali a cui ci riferiamo con il termine float.
  • gli array per contenere uno o più di questi tipi di dati

Nota bene: i tipi di dati possono essere contenuti in variabili e costanti.

Ecco alcuni esempi:

<?php

$string = "Mi chiamo Michele";   // Stringa di testo o STRING
$int = 9;                                            // Numero o INT
$float = 5.5;                                     // Numero decimale o FLOAT NUMBER
$bool = true;                                   // Valore booleano o BOOL
$null = null;                                    // Valore nullo o NULL

$array = array("Stringa", 10, 5.7, true, null);    // Collezione di dati o ARRAY

Vedremo questi e altri tipi di dati meglio più avanti.

Strutture di controllo

PHP ha diverse strutture di controllo e servono a modificare il comportamento di un programma durante la sua esecuzione, a effettuare iterazioni (loops) o a includere template esterni.

L’esempio classico di strutture di controllo sono i blocchi condizionali: if, if-else, if-else if, case-switch e gli operatori ternari.

Prendiamo come esempio un blocco if:

<?php

if (5 < 10) {
    echo "Vero, 5 è minore di 10";
}

Il blocco qui sopra è una struttura di controllo condizionale, vale a dire che se la condizione tra parentesi tonde è vera il codice tra parentesi graffe verrà eseguito.

Immagina di avere più strutture di controllo all’interno di uno script PHP. Quelle strutture di controllo serviranno al programma a cambiare il suo “comportamento” o “risultato” in base alle diverse condizioni poste.

Altre strutture di controllo sono i blocchi iterativi come: for, while, do-while, foreach.

Facciamo l’esempio del blocco iterativo o loop while:

<?php

$i = 0;
while ($i < 10) {
   echo $i;

   $i++;
}

Ti spiego brevemente cosa fa questo pezzo di codice, se non dovessi capirlo va bene ugualmente. Continua a esercitarti.

Ho definito una variabile $i uguale a 0 che userò come condizione nel blocco while. Subito dopo definisco il ciclo while inserendo la condizione $i < 10 tra parentesi tonde.

Poi inserisco le parentesi graffe {} per generare il corpo del blocco while e all’interno inserisco il codice che deve essere eseguito a ogni ciclo.

Nel mio caso ho scritto echo $i;. Quindi a ogni ciclo mostrerò su schermo un numero. Subito dopo ho inserito $i++; che significa “aumenta di 1 la variabile $i a ogni ciclo“;

In poche parole questo codice eseguirà 10 cicli stampando su schermo una serie di numeri che va da 0 a 9. Se avessi tolto $i++; nel ciclo avrei ottenuto un ciclo infinito.

Le strutture di controllo sono indispensabili per realizzare programmi in PHP. Le affronteremo una per una lungo il nostro percorso.

Devi sapere anche che le strutture di controllo possono essere usate assieme. Ad esempio, combiniamo un ciclo while con un blocco if:

<?php

$i = 0;
while ($i < 10) {
   if (5 < 10) {
       echo $i;
   }

   $i++;
}

Lascio a te l’interpretazione del codice, descrivimi il suo funzionamento qui sotto nei commenti!

Funzioni

Può capitare che all’interno di un programma dobbiamo ripetere più volte le stesse righe di codice per eseguire la stessa azione.

Ripetere lo stesso codice è una pratica sconsigliata perché riduce la sua flessibilità, il suo ordine e la capacità di mantenerlo con semplicità.

Qui entrano in gioco le funzioni. Possiamo immaginarle come dei contenitori che possono contenere porzioni di codice più o meno complesse per eseguire diversi compiti.

Per dichiarare una funzione utilizzo il costrutto function, subito dopo inserisco il nome della funzione (che devo inventare), le parentesi tonde () e poi quelle graffe {}. All’interno di quest’ultime scriverò il codice della funzione.

<?php

// Dichiarare una funzione in PHP
function nome_funzione() {
    // Qui scrivo il codice...
}

// Chiamo la funzione per poterla eseguire
nome_funzione();

Nota bene che definire una funzione non significa eseguirla. Per poter eseguire una funzione devo chiamarla successivamente, dove ne ho bisogno, inserendo prima il nome della funzione e poi le parentesi tonde: nome_funzione().

Ad esempio, questa funzione esegue un’addizione e mostra su schermo il risultato:

<?php

// Dichiaro la funzione
function addizione() {
    echo 2 + 2;
}

// Chiamo la funzione quante volte voglio o quando ne ho bisogno
addizione();
addizione();
addizione();
addizione();

// altro codice...

Adesso immagina operazioni più complesse come inviare una mail, eseguire una query al database o eseguire un loop.

Tutti questi compiti puoi inserirli in una funzione per chiamarla nel momento del bisogno. Automatizzando quindi quel compito evitando ripetizioni nel codice.

Le funzioni in un programma servono a soddisfare un principio fondamentale per scrivere del codice pulito. Stiamo parlando del principio DRY o “Don’t Repeat Yourself!” (Non ripeterti!).

Più avanti vedremo meglio le funzioni analizzando ogni singolo aspetto: funzioni con return, parametri, argomenti, funzioni variadiche ecc.

Funzioni precostruite

PHP è pieno di funzioni precostruite come tutti i linguaggi, realizzate dagli sviluppatori del linguaggio, per lavorare su molti aspetti del codice.

Danno una grossa mano a scrivere programmi, altrimenti dovresti scriverti tu a mano il minimo indispensabile per programmare.

In PHP esistono funzioni preprogrammate per:

In più PHP viene installato ed è compatibile con varie estensioni che aggiungono molte funzionalità utili. Ad esempio la classe PDO, viene fornita da un’estensione, e permette di lavorare con i database in modo più flessibile ed è compatibile con varie tipologie di database.

(brad traversy dice questo all’inizio del corso php oop MVC) https://www.udemy.com/course/object-oriented-php-mvc/

PHP è un linguaggio di programmazione facile e con poche regole da seguire per iniziare a scrivere i primi script. Questo porta inevitabilmente, specie per gli utenti meno esperti, a scrivere programmi con vari problemi di software design e di sicurezza.

Spazi e multilinea

In PHP è possibile giocare molto con gli spazi o ponendo il codice su più linee.

Considerando il fatto che il codice sia lo stesso, cambiare gli spazi e/o le linee del codice non cambierà il risultato del codice.

Ad esempio, i seguenti esempi di codice sono equivalenti, quindi daranno lo stesso risultato:

// Con spazi
$variabile1 = "Michele";
echo $variabile1;

// Senza spazi
$variabile2="Michele";
echo$variabile2;

Oppure prendi come esempio queste funzioni, la prima su una riga e l’altra su più righe, sono tecnicamente la stessa cosa:

<?php

// Su una sola riga
invia_email( $mittente, $ricevente, $oggetto, $messaggio );

// Su più righe
invia_email(
    $mittente,
    $ricevente,
    $oggetto,
    $messaggio
);

Aggiungere spazi o porre il codice su più linee serve a noi sviluppatori per distinguere visivamente ogni singola parte di un programma.

Ma non serve all’interprete per eseguire il programma.

Cosa hai imparato in questo articolo

  • La sintassi di base di PHP.
  • Cosa sono i tag di apertura e chiusura PHP <?php ?> e come vano usati.
  • Inserire codice PHP in un documento HTML.
  • Come eseguire l’output del testo con il costrutto echo.
  • Cosa sono le strutture di controllo, i commenti, le variabili, le costanti, le funzioni a un livello base.
  • Alcuni tipi di dati.

Alcuni concetti non erano chiari? Tranquillo, li comprenderai piano piano nel corso di questa guida.