Lezione 15: Le Funzioni Built-in di PHP più utilizzate

Scopri le funzioni integrate di PHP essenziali per ogni sviluppatore: dalla manipolazione di stringhe alla gestione di array e numeri.

Introduzione alle Funzioni Built-in di PHP

Benvenuti alla lezione 15 del nostro corso "Impara PHP in 50 lezioni". In questa sessione ci immergeremo in uno degli aspetti più potenti e versatili di PHP: le funzioni built-in.

Quando iniziamo a programmare, tendiamo a pensare che ogni operazione debba essere costruita da zero. Tuttavia, PHP è un linguaggio nato specificamente per il web, e per questo motivo include migliaia di funzioni predefinite (built-in) che ci permettono di eseguire operazioni complesse con una sola riga di codice. Immaginate le funzioni built-in come una "cassetta degli attrezzi" già pronta: invece di costruire un martello ogni volta che dovete piantare un chiodo, PHP vi fornisce il martello già pronto all'uso.

Perché è fondamentale conoscerle? Semplice: l'efficienza. Utilizzare le funzioni native non solo rende il vostro codice più leggibile e conciso, ma garantisce anche prestazioni migliori, poiché queste funzioni sono scritte in C e ottimizzate a livello di core del linguaggio.

Manipolazione delle Stringhe

Le stringhe sono ovunque nel web development: nomi di utenti, contenuti di articoli, email, messaggi di errore. PHP offre un set vastissimo di strumenti per manipolare il testo.

Funzioni per la lunghezza e la ricerca

Una delle funzioni più comuni è strlen(), che restituisce la lunghezza di una stringa. Questo è fondamentale, ad esempio, per validare che una password abbia almeno 8 caratteri.

Un'altra funzione essenziale è strpos(), utilizzata per trovare la posizione della prima occorrenza di una sottostringa all'interno di una stringa. È importante notare che strpos() restituisce false se la sottostringa non viene trovata, il che richiede l'uso dell'operatore di identità (===) per evitare errori di logica.

Trasformazione del testo

Per modificare il case di un testo utilizziamo strtoupper() (tutto maiuscolo) e strtolower() (tutto minuscolo). Per sostituire parti di un testo, la funzione regina è str_replace().

Vediamo un esempio pratico di come combinare queste funzioni:

<?php
$testo = "Ciao Mondo! Benvenuti nel corso di PHP.";

// Sostituiamo 'PHP' con 'Programmazione Web'
$nuovo_testo = str_replace("PHP", "Programmazione Web", $testo);

// Rendiamo tutto maiuscolo
$testo_maiuscolo = strtoupper($nuovo_testo);

echo "Originale: " . $testo . "\
";
echo "Modificato: " . $nuovo_testo . "\
";
echo "Maiuscolo: " . $testo_maiuscolo;
?>

Spiegazione: In questo codice abbiamo preso una stringa, sostituito una parola specifica e poi trasformato l'intero risultato in maiuscolo. Notate come l'operazione sia lineare e immediata.

Gestione degli Array

Se le stringhe sono i mattoni, gli array sono le strutture che organizzano questi mattoni. PHP eccelle nella gestione degli array, offrendo funzioni che permettono di aggiungere, rimuovere, ordinare e filtrare dati con estrema facilità.

Aggiungere e rimuovere elementi

La funzione array_push() permette di aggiungere uno o più elementi alla fine di un array. Al contrario, array_pop() rimuove l'ultimo elemento. Se invece dobbiamo lavorare con l'inizio dell'array, utilizzeremo array_unshift() e array_shift().

Operazioni avanzate di filtraggio e mappatura

Due delle funzioni più potenti per chi vuole scrivere codice pulito sono array_map() e array_filter().

  • array_map() applica una funzione a ogni elemento di un array, restituendo un nuovo array con i risultati.
  • array_filter() filtra gli elementi di un array in base a una condizione definita in una funzione di callback.

Ecco un esempio di come queste funzioni possano semplificare la vita:

<?php
$numeri = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 1. Filtriamo solo i numeri pari
$pari = array_filter($numeri, function($n) {
    return $n % 2 === 0;
});

// 2. Eleviamo al quadrato ogni numero rimasto
$quadrati = array_map(function($n) {
    return $n * $n;
}, $pari);

echo "Numeri originali: " . implode(", ", $numeri) . "\
";
echo "Numeri pari: " . implode(", ", $pari) . "\
";
echo "Quadrati dei pari: " . implode(", ", $quadrati);
?>

Spiegazione: In questo esempio abbiamo evitato di scrivere due cicli foreach manuali. Abbiamo prima isolato i numeri pari e poi trasformato quei numeri. L'uso di funzioni anonime (closure) rende il codice moderno e funzionale.

Funzioni Matematiche e Numeriche

Anche se PHP non è un linguaggio per il calcolo scientifico puro, gestisce benissimo le operazioni matematiche necessarie per l'e-commerce o la gestione di dati statistici.

Arrotondamenti

Esistono tre funzioni principali per l'arrotondamento:

  1. round(): Arrotonda al numero intero più vicino (standard).
  2. ceil(): Arrotonda sempre per eccesso (soffitto).
  3. floor(): Arrotonda sempre per difetto (pavimento).

Numeri casuali

La funzione rand($min, $max) genera un numero intero casuale. Per applicazioni che richiedono maggiore sicurezza (come la generazione di token di reset password), è preferibile utilizzare random_int(), che produce numeri crittograficamente sicuri.

Funzioni per la Validazione e il Sanitizing

In un contesto web, non bisogna mai fidarsi dell'input dell'utente. Questo è il mantra della sicurezza. PHP fornisce funzioni integrate per pulire e validare i dati.

Pulizia dei dati (Sanitizing)

La funzione trim() è fondamentale: rimuove gli spazi bianchi all'inizio e alla fine di una stringa, evitando che un utente inserisca accidentalmente uno spazio in un campo email.

htmlspecialchars() è forse la funzione più importante per prevenire attacchi XSS (Cross-Site Scripting). Converte i caratteri speciali in entità HTML (ad esempio, < diventa &lt;), impedendo al browser di eseguire codice JavaScript malevolo inserito in un form.

Validazione

La funzione filter_var() è uno strumento versatile che permette di validare se una stringa è un'email valida, un URL corretto o un indirizzo IP.

<?php
$email_input = " utente@esempio.com ";

// 1. Pulizia: rimuoviamo spazi superflui
$email_pulita = trim($email_input);

// 2. Validazione: controlliamo se è un'email valida
if (filter_var($email_pulita, FILTER_VALIDATE_EMAIL)) {
    echo "L'email è valida: " . $email_pulita;
} else {
    echo "L'email inserita non è valida.";
}
?>

Spiegazione: In questo snippet abbiamo combinato trim() per la pulizia e filter_var() per la validazione. Questo approccio è lo standard professionale per gestire i dati in ingresso.

Esempi Pratici: Casi d'Uso Reali

Caso 1: Generazione di un "Excerpt" per un Blog

Immaginate di avere un articolo lungo e di voler mostrare solo le prime 150 parole nella pagina principale.

<?php
$contenuto = "Questo è un articolo molto lungo che parla di programmazione web e di come PHP sia ancora oggi un linguaggio fondamentale per milioni di siti nel mondo...";

// Limitiamo a 150 caratteri e aggiungiamo i puntini di sospensione
$excerpt = substr($contenuto, 0, 150) . "...";
echo $excerpt;
?>

Caso 2: Formattazione di un Prezzo

Per visualizzare un prezzo in modo professionale, possiamo usare number_format().

<?php
$prezzo = 1250.5;
// Formattiamo con 2 decimali, virgola per i decimali e punto per le migliaia
echo "Prezzo finale: " . number_format($prezzo, 2, ',', '.') . " €";
// Output: Prezzo finale: 1.250,50 €
?>

Errori Comuni e FAQ

Perché strpos mi restituisce un errore se non trova la stringa?

strpos restituisce l'indice della posizione (che parte da 0). Se la stringa cercata si trova all'inizio, restituisce 0. Se non la trova, restituisce false. In PHP, 0 può essere interpretato come false se si usa l'operatore ==. Soluzione: Usate sempre l'operatore di identità === o !== per distinguere tra la posizione zero e il valore booleano false.

Differenza tra count() e sizeof()

In realtà, sizeof() è semplicemente un alias di count(). Non c'è alcuna differenza tecnica, ma count() è molto più comune e raccomandato nella comunità PHP.

Quando usare array_merge vs l'operatore +?

array_merge() riindicizza gli array numerici e sovrascrive i valori delle chiavi stringa. L'operatore + invece mantiene le chiavi originali e non sovrascrive i valori se la chiave esiste già nel primo array. Per la maggior parte dei casi di unione di dati, array_merge() è la scelta corretta.

Prossimi Passi

Ora che avete familiarità con le funzioni built-in più comuni, vi consigliate di fare due cose:

  1. Sperimentazione: Aprite un file PHP e provate a combinare queste funzioni. Provate a creare un sistema che prenda una lista di nomi, li pulisca da spazi, li metta in ordine alfabetico e li stampi in una lista HTML.
  2. Documentazione Ufficiale: Il sito php.net è la vostra risorsa principale. Ogni volta che pensate "Chissà se PHP può fare questo...", cercate nella sezione "Functions".

Nella prossima lezione, vedremo come creare le nostre funzioni personalizzate, imparando a rendere il nostro codice riutilizzabile e modulare attraverso l'astrazione.