Tag: php, backend, oop, type-system, composer
Livello: intermedio
TL;DR: Linguaggio di scripting backend a tipizzazione graduale. Concetti chiave su lifecycle request/response, OOP moderna (PHP 8+), gestione memoria e standard PSR.
Modello di esecuzione "shared-nothing": ogni richiesta HTTP inizializza e distrugge l'intero ambiente applicativo.
Modalita strict_types=1 applicata per singolo file per abilitare il type checking rigoroso.
Constructor Property Promotion riduce il boilerplate dichiarando la visibilita direttamente negli argomenti del costruttore.
Tipi di unione e intersezione permettono definizioni di tipo complesse e controllate staticamente.
match expression sostituisce switch con controllo di identita stretta (===) e ritorno di valori.
Gestione delle dipendenze standardizzata tramite Composer e autoloading basato su convenzioni PSR-4.
OpCache compila lo script in bytecode in memoria condivisa evitando il parsing a ogni richiesta.
Garbage collection basata su reference counting con algoritmo circolare per liberare memoria da riferimenti ciclici.
Q: Qual e la differenza tra == e === in PHP?R: == esegue il type juggling convertendo i tipi prima del confronto, mentre === verifica sia l'uguaglianza del valore sia l'identita del tipo senza conversioni implicite.
Q: Come funziona il ciclo di vita di un'applicazione PHP tradizionale rispetto a Node.js?R: In PHP tradizionale ogni richiesta HTTP ha il suo spazio di memoria isolato che si distrugge a fine risposta, mentre Node.js mantiene un processo server persistente con event loop condiviso.
Q: A cosa serve declare(strict_types=1)?R: Forza il motore a non convertire automaticamente scalari passati o restituiti da funzioni, sollevando un TypeError se il tipo non corrisponde esattamente a quello dichiarato.
Omettere declare(strict_types=1) causa silenti conversioni implicite tra stringhe e interi durante il passaggio dei parametri.
Utilizzare array_merge dentro cicli lunghi crea copie continue dell'array degradando le prestazioni in modo esponenziale.
L'operatore ternario annidato senza parentesi prima di PHP 8 valutava da sinistra a destra generando comportamenti inattesi.
Dimenticare che empty("0") valuta a true, scambiando stringhe valide per valori vuoti.
<?php
declare(strict_types=1);
namespace App\Services;
class UserService
{
public function __construct(
private readonly DatabaseInterface $db,
private string $role = 'guest'
) {}
public function process(int|string $id): string
{
return match (true) {
is_int($id) && $id > 0 => "ID numerico: {$id}",
default => "Formato non valido",
};
}
}
Bash
```composer dump-autoload -o
php -d memory_limit=512M vendor/bin/phpunit
```
[ ] Meccanismo di preloading introdotto con Opcache da PHP 7.4
[ ] Fibers e gestione asincrona nativa da PHP 8.1
[x] Principi di autoloading PSR-4 e namespace standard
[x] Nullsafe operator (?->) e match expression