Introduzione a PHP: creare una pagina dinamica con template riutilizzabili

by theArchitect
SHARE
Introduzione a PHP: creare una pagina dinamica con template riutilizzabili
© Guida-HTML5.it

Introduzione

Quando si inizia a lavorare con PHP, è comune inserire tutto il codice in un unico file: configurazione, HTML, logica applicativa e accesso ai dati. Questo approccio può funzionare per un piccolo esercizio, ma diventa rapidamente difficile da mantenere. Una soluzione semplice e molto utile consiste nel dividere il progetto in più file e riutilizzare le parti comuni tramite include e require_once.

In questo tutorial costruiremo una piccola pagina PHP composta da un’intestazione, un contenuto principale e un piè di pagina. Il progetto mostrerà anche come definire una configurazione centrale e come passare dati a un template. Si tratta di una tecnica fondamentale per creare siti dinamici ordinati, evitando duplicazioni di codice.

La differenza principale tra include e require riguarda la gestione degli errori. Se il file indicato da include non viene trovato, PHP genera un avviso e prova a continuare l’esecuzione. Con require, invece, l’esecuzione viene interrotta. La variante require_once garantisce inoltre che il file venga caricato una sola volta.

Codice completo

Creiamo la seguente struttura di progetto:

progetto/
├── config.php
├── functions.php
├── index.php
└── templates/
    ├── header.php
    └── footer.php

Il file config.php contiene i dati di configurazione dell’applicazione:

<?php
// config.php

// Costanti disponibili in tutto il progetto
const SITE_NAME = ´Diario PHP´;
const SITE_DESCRIPTION = ´Un semplice sito creato con PHP´;
?>

Nel file functions.php definiamo una funzione per mostrare un titolo HTML in modo sicuro:

<?php
// functions.php

function escapeHtml(string $value): string
{
    // Evita che caratteri speciali vengano interpretati come HTML
    return htmlspecialchars($value, ENT_QUOTES, ´UTF-8´);
}
?>

Creiamo il template dell’intestazione:

<?php
// templates/header.php

require_once __DIR__ . ´/../config.php´;
require_once __DIR__ . ´/../functions.php´;
?>
<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title><?= escapeHtml($pageTitle) ?> - <?= SITE_NAME ?></title>
</head>
<body>
    <header>
        <h1><?= SITE_NAME ?></h1>
        <p><?= SITE_DESCRIPTION ?></p>
    </header>
    <main>

Il template del piè di pagina chiude i contenitori HTML:

<?php
// templates/footer.php
?>
    </main>

    <footer>
        <p>&copy; <?= date(´Y´) ?> - <?= SITE_NAME ?></p>
    </footer>
</body>
</html>

Infine, il file principale prepara i dati e include i due template:

<?php
// index.php

declare(strict_types=1);

$pageTitle = ´Pagina iniziale´;
$welcomeMessage = ´Benvenuto nel mio primo sito PHP organizzato!´;

require_once __DIR__ . ´/templates/header.php´;
?>

<section>
    <h2><?= escapeHtml($pageTitle) ?></h2>
    <p><?= escapeHtml($welcomeMessage) ?></p>
</section>

<?php
require_once __DIR__ . ´/templates/footer.php´;

Spiegazione

L’esecuzione comincia da index.php. Qui vengono assegnati i valori delle variabili $pageTitle e $welcomeMessage. Successivamente viene incluso header.php, che produce la parte iniziale della pagina.

Le variabili definite prima di un’istruzione require_once sono disponibili nel file incluso. Per questo motivo header.php può utilizzare $pageTitle. Questa caratteristica è utile per creare template generici che ricevono informazioni specifiche dalla pagina corrente.

L’espressione breve <?= ... ?> è equivalente a <?php echo ...; ?>. Permette quindi di stampare rapidamente un valore all’interno dell’HTML. Ad esempio:

<?= $welcomeMessage ?>

equivale a:

<?php echo $welcomeMessage; ?>

La funzione escapeHtml() applica htmlspecialchars() ai dati prima di stamparli. Anche se in questo esempio i valori sono scritti direttamente nel codice, nella pratica potrebbero provenire da un database, da un file o da un utente. La conversione dei caratteri speciali riduce il rischio di attacchi di tipo XSS, nei quali un aggressore inserisce codice JavaScript nella pagina.

__DIR__ rappresenta la cartella assoluta del file PHP corrente. Usarlo nei percorsi è più affidabile rispetto a scrivere semplicemente templates/header.php, perché evita problemi quando lo script viene eseguito da una cartella di lavoro diversa.

Best practice

  • Usa require_once per file indispensabili: configurazioni, funzioni e classi necessarie all’applicazione dovrebbero interrompere l’esecuzione se non vengono trovate.
  • Organizza il progetto: mantieni separati template, configurazione e logica applicativa. Una struttura ordinata semplifica modifiche e manutenzione.
  • Evita duplicazioni: intestazioni, menu e piè di pagina dovrebbero essere definiti una sola volta.
  • Proteggi l’output: applica htmlspecialchars() ai dati dinamici provenienti da fonti non completamente affidabili.
  • Utilizza percorsi robusti: __DIR__ rende i riferimenti ai file più prevedibili.
  • Attiva il controllo rigoroso: declare(strict_types=1) aiuta a individuare errori legati ai tipi durante lo sviluppo.
  • Non inserire segreti nei template: password, chiavi API e credenziali devono essere gestite in file protetti e mai pubblicate nel repository.

Riepilogo

Separare un’applicazione PHP in file riutilizzabili è uno dei primi passi verso un codice professionale. Con require_once possiamo caricare configurazioni e funzioni senza ripetere lo stesso codice. I template permettono invece di centralizzare le parti comuni dell’interfaccia, mentre le variabili consentono di personalizzare ogni pagina.

La tecnica mostrata è adatta a piccoli siti, esercizi didattici e prototipi. Con la crescita del progetto sarà possibile evolvere verso classi, autoloading, sistemi di template e framework, ma i principi fondamentali resteranno gli stessi: separazione delle responsabilità, riuso del codice e controllo dell’output.

Approfondisci con risorse ufficiali

SHARE