22. I template in PHP

Andrea Pastore 27/09/2020 0

Con la programmazione ad oggetti abbiamo introdotto il paradigma MVC, che consiste nel tener separate la definizione degli oggetti, logiche di controllo e le viste. Un modo ottimale per gestire le viste consiste nell'utilizzo file HTML contenenti il markup dell’elemento, ma con dei valori segnaposto che vengono sostituiti di volta in volta. Questi file HTML vengono chiamati template. Ogni volta che dovrà essere stampato un elemento di quel tipo (si pensi ad esempio a degli articoli) il codice PHP prenderà il template, sostituirà i valori segnaposto con quelli reali ed eseguirà la stampa.

Il vantaggio di questo approccio è ancora una volta nella manutenzione del codice, perché il codice HTML sarà separato dal codice PHP e sarà possibile riutilizzarlo tutte le volte che serve.

Facciamo un esempio su come avviene la gestione: supponiamo di dover inserire in una pagina una serie di articoli. Il codice degli articoli sarà sempre uguale, cambieranno solo i contenuti. Quindi possiamo creare un file che chiameremo articolo.html fatto in questo modo:

<div class=”articolo” >
<h1> _titolo_ </h1>
<h2> _sottottitolo_ </h2>
<p> _testo_ </p>
</div>

possiamo poi creare una funzione PHP che recupera queste informazioni e sostituisce gli articoli ogni volta:

	function renderizzaArticoli($titolo, $sottoTitolo,$testo) {
$codice = file_get_contents(“articolo.html”);
$codice = str_replace(“_titolo_”,$titolo);
$codice = str_replace(“_sottottitolo_”,$sottottitolo);
$codice = str_replace(“_testo_”,$testo);
echo $codice;
}

In questo modo il codice per recuperare gli articoli potrebbe essere:

	$query = “SELECT * FROM articoli”;
if(!$risQuery = $db->query($query)) {
                    echo "Errore durante l'esecuzione della query: ".$db->error;
                    echo "<br>$query";
                exit();
          }

while($articolo = $risQuery→fetch_assoc()) {
renderizzaArticoli($articolo[“titolo”], $articolo[“sottoTitolo”],$articolo [“testo”]);
}

Creiamo una funzione più generalista

La funzione renderizzaArticoli vista sopra svolge il suo dovere per stampare gli articoli ma è troppo specializzata, possiamo usarla solo per questo compito. Questo approccio non è l’ideale, perché ci costringe a creare una funzione per ogni oggetto che dobbiamo renderizzare. 

La soluzione migliore è costruire una funzione generalista, che non prenda parametri precisi ma un template e un array di parametri, che sostituisce di volta in volta:

	function renderizza($template, $parametri) {
$codice = file_get_contents($template);
foreach($parametri as $etichetta => $valore) {
                $ codice = str_replace("_$etichetta_",$valore,$codice);
            }
echo $codice;
}

Possiamo quindi riscrivere il codice visto sopra in questo modo:

	$query = “SELECT * FROM articoli”;
if(!$risQuery = $db->query($query)) {
                    echo "Errore durante l'esecuzione della query: ".$db->error;
                    echo "<br>$query";
                exit();
          }

while($articolo = $risQuery→fetch_assoc()) {
renderizza(“articolo.html”,array(“titolo”=>$articolo[“titolo”], ”sottoTitolo”=> $articolo[“sottoTitolo”], ”testo”=>$articolo [“testo”]));
}

In questo modo quando vorremmo utilizzare la stessa funzione per stampare altri tipi di elementi ci basterà cambiare il template HTML e i parametri dell’array. Un’altra ottimizzazione è quella di chiamare i campi della tabella e del template HTML allo stesso modo, in modo da passare direttamente l’array associativo ricavato dalla variabile $risQuery. Vediamo un esempio:

	$query = “SELECT titolo, sottoTitolo, testo FROM articoli”;
if(!$risQuery = $db->query($query)) {
                    echo "Errore durante l'esecuzione della query: ".$db->error;
                    echo "<br>$query";
                exit();
          }

while($articolo = $risQuery→fetch_assoc()) {
renderizza(“articolo.html”,$articolo);
}
Potrebbero interessarti anche...

Andrea Pastore 26/09/2020

6. Prendere decisioni: il costrutto if

PHP può prendere decisioni tramite il costrutto if, la cui sintassi è:

 if($i>10) {

      echo "i è maggiore di 10";

 }

la parola chiave if è seguita dalle parentesi tonde che indicano una condizione. Le parentesi graffe successive indicano invece il codice che viene eseguito se la condizione è verificata

else ed else if

I costrutti else ed else if servono per aggiungere delle possibilità all’if. Entrambi hanno bisogno di un if prima, e servono per poter prendere diverse decisioni. Nel codice sottostante usiamo un else per eseguire del codice quando a condizione non è verificata:

  if($i>10) { // il codice sottostante verrà eseguito solo se la condizione è verificata

        echo "i è maggiore di 10";

  }

  else {  // questo codice viene eseguito se la condizione a riga 13 non è verificata

        echo "non è maggiore di 10";

  }

Quando dobbiamo verificare più condizioni ci viene in aiuto l’else if. nell’esempio sottostante il nostro if verificherà prima se la variabile $i è maggiore di 10, poi se è maggiore di 5 e infine se nessuan di queste due condizioni è verificata eseguirà il codice contenuto nell’else.

  if($i>10) { // il codice sottostante verrà eseguito solo se la condizione è verificata

        echo "i è maggiore di 10";

  }

  else if($i>5){  // se la prima condizione non è verificata prova questa

        echo "i è maggiore di 5";

  }

  else {  // questo codice viene eseguito se nessuna condizione è verificata

        echo "non è maggiore di 10";

  }

Nota che quando il costrutto verifica una condizione, ad esempio la prima, verrà eseguito solo il codice conenuto in quella sottosezione. Spesso queste sottosezioni sono chiamate rami.

Possibili condizioni dell’if

Oltre ai simboli > e < che servono per controllare se un numero è maggiore o minore di un altro, abbiamo altre condizioni che possiamo usare, ad esempio possiamo usare l’operatore == per verificare l’uguaglianza di due numeri oppure due stringhe.

  if($i==10) { // il codice di questo if verrà eseguito solo se la variabile $i = a 10

echo “i due numeri sono uguali”;

  }

vediamo un esempio con le stringhe:

  // il codice di questo if verrà eseguito solo se la variabile $str è uguale a “stringa”

  if($str == “stringa”) {

echo “La stringa ha il valore che abbiamo stabilito”;

  }

un’altra possibile condizione che potremmo dover verificare è se due variabili sono diverse, per questo usiamo l’operatore !=

  if($i != 10) { // il codice all’interno dell’if verrà eseguito solo se $i è diverso da 10

echo “$i è diverso da 10”;

  }

Stesso discorso con la stringa:

  // il codice di questo if verrà eseguito solo se la variabile $str è diversa da “stringa”

  if($str != “stringa”) {

echo “La stringa non ha il valore stringa”;

  }

Facciamo ora una tabella riassuntiva con gli operatori usabili all’interno di un if. Questi operatori sono detti operatori di uguaglianza.

Operatore  Nome  Esempio  Spiegazione 
 ===  Identical  $i === $k  Restituisce true se $i ha lo stesso valore di $k ed è dello stesso tipo di $k
 ==  Equal  $i == $k  Restituisce true se $i ha lo stesso valore di $k
 !=  Not equal  $i != $k  Restituisce true se $i è diverso da $k
 <  Less then  $i < $k  Restituisce true se $i è minore di $k
 >  Greater then  $i > $k  Restituisce true se $i è maggiore di $k
 <=  Less then or equal to  $i <= $k  Restituisce true se $i è minore o uguale a $k
 >=  Greater then or equal to  $i >= $k  Restituisce true se $i è maggiore o uguale a $k

Gli operatori AND e OR

Spesso quando prendiamo decisioni non basta prendere in esame un solo parametro

L’operatore OR

l’operatore OR si occupa di verificare che una delle condizioni specificate è vera. In PHP l’operatore OR è dato dal comando || . Si veda il seguente esempio:

if($var==0 || $var2 == 0) {

echo “una delle due variabili vale 0”;

}

La scritta “una delle due variabili vale 0” viene stampata solo se una delle due variabili rispetta la condizione. Notiamo che se entrambe rispettano la condizione la scritta viene stampata ugualmente, perché l’operatore OR controlla che almeno una condizione sia verificata.

L’operatore AND

L’operatore AND verifica che tutte le condizioni specificate siano vere. IN PHP si può usare questo operatore scrivendo &&. Modifichiamo l’esempio di prima usando l’operatore AND al posto dell’operatore OR. Il codice sarà quindi il seguente:

if($var==0 && $var2 == 0) {

echo “entrambe le due variabili valgono 0”;

}

in questo caso la scritta “entrambe le due variabili valgono 0” viene stampata solo se sia $var che $var1 valgono 0.

Il costrutto switch

Quando in un if dobbiamo verificare diverse condizioni possiamo utilizzare il costrutto switch, che ha la seguente sintassi:

    switch($variabile) {

        case 'crea':

            $commento->crea();

            break;

        case 'modifica':

            $commento->modifica();

            break;

...

    }

tramite la parola chiave case possiamo stabilire nuove operazioni da fare in base al valore della variabile passata in input allo switch. Al termine di ogni blocco dobbiamo usare la parola chiave break per terminare quel ciclo di istruzioni.

Leggi tutto

Andrea Pastore 27/09/2020

19. La programmazione a oggetti

Finora abbiamo programmato in modo procedurale, ovvero le istruzioni che abbiamo scritto venivano eseguite una dopo l’altra. Questo sistema di programmazione non è molto efficiente, perché i codici diventano molto grandi e difficilmente manutenibili. La programmazione ad oggetti è nata per risolvere questo problema. Si basa su due principi fondamentali: le classi e gli oggetti. Una classe è un file che definisce un tipo di dato, nonché le operazioni che possono essere effettuate dagli oggetti di quella classe. Sarà possibile poi creare oggetti di quel tipo di dato che possono eseguire le operazioni stabilite.

Caratteristiche programmazione ad oggetti

Le variabili di classe

Una classe può avere variabili proprie, che spesso sono accessibili solo a lei (approfondiremo questa cosa tra poche righe, quando parleremo dell’incapsulamento).  Le variabili di una classe si dichiarano in alto, subito dopo la dichiarazione della classe.

I metodi

I metodi sono delle funzioni che possono essere invocate solo sugli oggetti della classe. Mantengono le stesse proprietà delle funzioni, ma sono applicate solo all’istanza della classe su cui vengono eseguite.

Il costruttore

Il costruttore è un metodo speciale che consente di creare un’istanza dell’oggetto. Viene creato con il metodo __construct, che può prendere in input dei parametri ed inizializzare il nostro oggetto con i loro valori. Il costruttore viene posizionato di solito sotto le variabili di classe.

Incapsulamento

Nelle classi abbiamo la possibilità di scegliere, oltre al tipo di variabile, anche il livello di accesso, tra questi tre valori:

  • public
    se dichiariamo una variabile public questa sarà accessibile anche all’esterno della classe, qualunque parte di un programma potrà leggere quei valori.
  • private
    Se invece la dichiariamo private questi valori potranno essere letti solo all’interno della classe.   
  • protected
    è una via di mezzo: consente la lettura di questa variabile alle classi che estendono la classe che stiamo scrivendo. Vedi il paragrafo successivo sull’ereditarietà.

Nota: in PHP se non scriviamo uno specificatore di accesso i metodi sono public, ovvero possono essere invocati da chiunque.

la regola è quella di dichiarare le variabili private e poi utilizzare dei metodi per restituire o modificare dei valori.

La nostra prima classe in PHP

Creiamo ora la nostra prima classe in PHP. Supponiamo di voler creare una classe che rappresenti un libro, e memorizzare titolo, autore e genere. Il codice di questa classe sarà:

<?php

class Libro {

    private $titolo;

    private $autore;

    private $genere;

    /*

     * Il costruttore in PHP viene creato con il metodo __construct,

     * che può prendere in input dei parametri ed inizializzare il

     * nostro oggetto con i loro valori

     */

    function __construct($titolo, $autore, $genere) {

        $this->titolo = $titolo;

        $this->autore = $autore;

        $this->genere = $genere;

    }

    // getter & setter

    function getTitolo() {

        return $this->titolo;

    }

    function getAutore() {

        return $this->autore;

    }

    function getGenere() {

        return $this->genere;

    }

    function setTitolo($titolo): void {

        $this->titolo = $titolo;

    }

    function setAutore($autore): void {

        $this->autore = $autore;

    }

    function setGenere($genere): void {

        $this->genere = $genere;

    }

}
Leggi tutto

Andrea Pastore 27/09/2020

25. Composer

Composer è un gestore di pacchetti per PHP. È nato nel 2015 e da allora si è imposto come lo standard per la gestione delle dipendenze.

Scaricare Composer

Per scaricare Composer visitare il sito https://getcomposer.org/ e a seconda del sistema operativo che avete avrete una diversa procedura di installazione.

Il file composer.json

Il file composer.json contiene tutte le dipendenze per gestire il nostro progetto. Quando dobbiamo utilizzare una libreria esterna ci basterà inserirla in questo file e automaticamente Composer la scaricherà per noi.

Esempio di composer.json :

{

    "require": {

        "monolog/monolog": "dev- master#2eb0c0978d290a1c45346a1955188929cb4e5db7",

        "acme/foo": "1.0.x-dev#abc123"

    },

    "autoload": {

        "psr-4": {

            "Monolog\\": "src/",

            "Vendor\\Namespace\\": ""

        }

    }
Leggi tutto

Cerca...