2 — Sintassi e variabili in PHP
Obiettivo del modulo. Fornire una conoscenza esaustiva della sintassi di base di PHP, del modello di variabili e tipi, delle costanti e degli operatori, con esempi pronti all’uso e un esercizio guidato (calcolo area e perimetro di un rettangolo) implementato in più varianti (script semplice, form web, CLI, versione “robusta” con validazione e test).
Indice
-
Struttura base di un file PHP
-
Tag PHP e integrazione HTML
-
Modalità di esecuzione (CLI / server integrato / server web)
-
Direttive utili per sviluppo (error reporting, display_errors)
-
Variabili: binding, naming, scope
-
Tipi di dato in PHP (primitivi e compound)
-
Type juggling, casting esplicito e
declare(strict_types=1) -
Costanti:
constvsdefine() -
Operatori (aritmetici, confronto, logici, stringa, bitwise, null coalescing, spaceship, ecc.)
-
Stringhe: concatenazione, interpolazione, heredoc/nowdoc
-
Superglobals e input (sicurezza e validazione)
-
Buone pratiche e anti-pattern
-
Esercizio completo: Area e perimetro del rettangolo — 4 versioni (snippet + spiegazioni)
-
Test, logging e error handling (sintesi)
-
Riferimenti e letture consigliate
1 — Struttura base di un file PHP
Un file PHP è un file di testo con estensione .php che contiene codice PHP racchiuso tra tag di apertura e tag di chiusura. La struttura minima:
Si possono mescolare HTML e PHP:
Nota: preferire sempre <?php ... ?> per compatibilità. Il short-tag <? è deprecato/oscillante in alcune configurazioni; il short-echo <?= ... ?> è disponibile di default nelle versioni recenti di PHP ed è comodo per l’output rapido.
2 — Tag PHP e integrazione HTML
-
<?php ... ?>blocco PHP standard. -
<?= expr ?>equivalente a<?php echo expr; ?>. Utile in template. -
<?short tag (sconsigliato). -
/* ... */commento multi-linea,//e#commento single-line.
Esempio di template semplice (separazione logica/presentazione):
Usare htmlspecialchars() per prevenire XSS quando si visualizza input utente.
3 — Modalità di esecuzione
-
Server web (Apache / Nginx + PHP-FPM / mod_php): file serviti via
http://localhost. -
Server integrato (dev):
php -S localhost:8000 -t public/per test rapido (non per produzione). -
CLI:
php script.phpper strumenti a riga di comando. In CLI sono disponibili$argc,$argv.
Esempio CLI:
Dove rect_cli.php legge $argv[1] e $argv[2].
4 — Direttive utili per sviluppo
Nel file o in php.ini per sviluppo impostare:
In produzione disabilitare display_errors e loggare invece gli errori (error_log).
5 — Variabili: binding, naming e scope
Binding
In PHP le variabili iniziano con $ e fanno binding dinamico all’oggetto:
Regole di naming
-
Iniziano con
$seguito da lettera o underscore. -
Sensibili a maiuscole/minuscole:
$Var≠$var. -
Evitare nomi di funzione o parole riservate.
Scope
-
Local (variabili dentro funzione), global (variabili file-scope), superglobals (
$_GET,$_POST,$_SERVER,$_SESSION,$_COOKIE,$_FILES,$_ENV,$GLOBALS). -
Per accedere a una variabile globale dentro una funzione usare
$GLOBALS['name']oglobal $name;. -
staticall’interno di una funzione mantiene valore tra invocazioni.
Esempi:
Variabili variabili (es. $a = 'b'; $$a = 5; → crea $b = 5) — utile ma spesso fonte di confusione e rischi; evitarle o usarle con cautela.
6 — Tipi di dato in PHP
Tipi scalari
-
int(integer),float(double),string,bool(boolean). -
nullrappresenta assenza di valore.
Tipi compound
-
array(vettori e mappe associative),object(istanze di classi),resource(risorse esterne: handle DB, stream).
Tipi speciali
-
callable,iterable(PHP 7+),mixed(PHP 8.0+), e union types (PHP 8+) comeint|float.
Funzioni utili
-
gettype($x),var_dump($x),print_r($x),is_int(),is_float(),is_numeric(),is_string(),is_array(),is_null().
Esempio:
7 — Type juggling, casting e declare(strict_types=1)
PHP coerce automaticamente tipi quando necessario (type juggling), es.: '5' + 2 → 7. Questo può essere comodo ma anche fonte di bug.
Casting esplicito
Con strict_types attivo, la chiamata add('2','3') genera un TypeError; senza strict_types PHP tenterà coerzione.
Union types (PHP 8)
8 — Costanti: const vs define()
-
const NAME = value;— definizione a compile-time (dentro classi o global scope). -
define('NAME', value);— definizione a runtime (case-sensitive per default).
Esempio:
Dal PHP 7 si possono usare const anche per array.
9 — Operatori
Aritmetici
+ - * / % ** (potenza **).
Assegnamento
=, +=, -=, *=, /=, .= (concatenazione assegnata).
Confronto
-
==(valore),===(valore + tipo),!=,!==,<, >, <=, >=. -
Operator
<=>(spaceship) restituisce -1, 0, 1 — utile per sort comparators (PHP 7+).
Logici
and, or, xor, &&, ||, !. Nota: and/or hanno precedenza inferiore rispetto ad = — preferire && e || in espressioni complesse.
Stringhe
Concatenazione: . operator. Interpolazione nelle stringhe doppie ("valore $v").
Null coalescing
$x = $_GET['p'] ?? 'default'; — ideale per recuperare valori con fallback.
Null coalescing assignment (PHP 7.4+)
$a ??= 'default';
Operator precedence
Attenzione alla precedenza: es. false && true vs false and true e =. Usa parentesi per chiarezza.
Esempi:
10 — Stringhe: literal, interpolation, heredoc, nowdoc
-
Doppie virgolette: interpreti variabili e sequenze (
\n,\t). -
Single quotes: letterale, migliore performance se non serve interpolation.
-
Heredoc:
<<<EOT ... EOT;interpreta variabili. -
Nowdoc:
<<<'EOT' ... EOT;come single quote (no interpolation).
Esempi:
11 — Superglobals, input e sicurezza
Superglobals
-
$_GET,$_POST,$_REQUEST,$_COOKIE,$_FILES,$_SESSION,$_SERVER,$_ENV,$GLOBALS.
Input handling e validazione
-
Non fidarsi mai di input utente. Usare
filter_input()efilter_var().
Esempio:
Per stringhe e output HTML usare htmlspecialchars($str, ENT_QUOTES, 'UTF-8').
XSS e escaping
-
Escape sempre output destinato all’HTML.
-
Per SQL usare prepared statements (PDO with prepared statements) per evitare SQL injection.
CSRF
-
Per form sensibili, utilizzare token CSRF memorizzati in
$_SESSION.
12 — Buone pratiche e anti-pattern
Consigli
-
Abilitare
declare(strict_types=1)nei file di produzione per maggior robustezza (valutare trade-off con interoperabilità). -
Separare logica e view (template engine: Twig, Blade, ecc.).
-
Usare PDO + prepared statements per DB.
-
Validare e sanificare sempre input.
-
Usare Composer per gestione dipendenze e PSR-12 per coding standard.
Anti-pattern
-
Non usare
eval()su input utente. -
Evitare
extract()su$_REQUEST. -
Evitare
@operator per silenziare errori: nasconde problemi. -
Non scrivere HTML con echo concatenati estensivamente — preferire template.
13 — Esercizio: script che calcola area e perimetro di un rettangolo
Presenteremo 4 versioni: (A) script semplice, (B) form web minimo, (C) form robusto con validazione e output sicuro, (D) CLI + test.
Versione A — Script PHP minimo (funziona in CLI o web con query string)
rect_simple.php
Chiamare: http://localhost/rect_simple.php?w=3.5&h=2.25
Limiti: nessuna validazione, output non escapato (ma numerico).
Versione B — Form web minimo (GET)
rect_form.php
Versione C — Form robusto con validazione e sicurezza
rect_robust.php
Punti chiave della versione C
-
declare(strict_types=1)impone controlli più rigorosi sulle tipologie quando usate type hints. -
parseDecimal()gestisce la virgola come separatore decimale e blocca input non numerici. -
htmlspecialchars()per evitare XSS. -
number_format()per output leggibile con formattazione locale.
Versione D — CLI e test rapido
rect_cli.php
Test semplice (shell):
Output:
14 — Test, logging e error handling
Logging
Usare error_log() per registrare errori lato server o un logger PSR-3 (Monolog):
Unit testing
Per test automatici usare PHPUnit. Esempio di test (scheletro):
tests/RectTest.php
rect_functions.php con funzioni pure da testare:
Error handling
-
Usare eccezioni per casi critici.
-
Validare input e restituire messaggi utente chiari.
-
Non esporre informazioni di debug in produzione.
15 — Riepilogo best practice per il modulo
-
Validazione: ogni input va validato e sanitizzato (
filter_input,filter_var). -
Escaping:
htmlspecialcharssempre per output HTML. -
Typed code: preferire type hints e
declare(strict_types=1)nei moduli critici. -
Separa logica e presentazione: non mischiare troppo echo HTML/procedurale; usare template engine se il progetto cresce.
-
No eval, no
extract($_REQUEST), no@operator. -
Usa PDO per accesso DB e prepared statements.
-
Gestione errori: log, testing e configurazione ambiente (dev vs prod).
Esempi addizionali e casi limite (quick reference)
-
'5' + '3'→8(coercizione numerica) -
'05' == 5→ true,'05' === 5→ false -
0 == 'abc'→ true (attenzione!) — megliois_numeric()prima di convertire. -
??and?:differenza:$x = $a ?? 'd'vs$x = $a ?: 'd'(?:considera falsy).
16 — Materiale didattico consigliato e riferimenti
-
Manuale PHP (php.net) — pagine essenziali: Variables, Types, Type Declarations, filter_input, htmlspecialchars, PDO.
-
PSR-12 Coding Style Guide — standard di codice PHP.
-
OWASP PHP Security Cheat Sheet — buone pratiche di sicurezza web.
-
PHPUnit documentation — testing in PHP.
Conclusione e proposte operative (per il docente o il corsista)
-
Per la lezione di 3 ore:
-
30' teoria (sintassi, tags, error reporting),
-
45' variabili, tipi e operatori con esercizi rapidi (quiz su cui è vero/falso),
-
30' stringhe e formattazione,
-
45' laboratorio (implementare Versione B o C dell’esercizio rettangolo),
-
30' testing e riflessioni su sicurezza e best-practice.
-
-
Materiale da consegnare: zip con gli script (
rect_simple.php,rect_form.php,rect_robust.php,rect_cli.php),rect_functions.phpper unit tests, eREADME.mdcon istruzioni per eseguire in dev server (php -S localhost:8000).

Nessun commento:
Posta un commento