0Pricing
PHP Academy · Lezione

Type juggling e type casting

Comprendere come PHP converte automaticamente i tipi e come eseguire il casting manualmente.

Type juggling e type casting è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.

Che cos'è il type juggling?

Type juggling significa che PHP converte automaticamente il tipo di un valore quando un operatore o una funzione richiede un tipo diverso.

È una funzionalità comoda, ma può causare bug difficili da individuare se non si comprendono le regole.

Conversione automatica dei tipi nelle operazioni aritmetiche

PHP converte le stringhe in numeri quando vengono utilizzate in un contesto aritmetico:

<?php
echo '5' + 3;       // 8  — string '5' becomes int 5
echo '5.5' + 1.5;   // 7  — string '5.5' becomes float
echo '5 cats' + 1;  // 6  — leading numeric part used, rest ignored
echo 'cats' + 1;    // 1  — non-numeric string becomes 0

Confronto debole ==

L'operatore == confronta i valori dopo la conversione automatica dei tipi: questo può produrre risultati sorprendenti:

<?php
var_dump(0 == 'a');      // true in PHP 7 (both become 0)
                          // false in PHP 8 (improved rules!)
var_dump('' == false);   // true
var_dump('1' == true);   // true
var_dump(null == false); // true

Confronto stretto ===

Utilizzi sempre === per confrontare sia il valore sia il tipo: non avviene alcuna conversione automatica:

<?php
var_dump(1 === '1');   // false — different types
var_dump(1 === 1);     // true
var_dump(null === false); // false
var_dump(0 === false); // false

// Rule of thumb: prefer === unless you explicitly need type coercion

Conversione esplicita del tipo

Converta un valore in un tipo specifico anteponendo (type):

<?php
$str = '42.7';

$int   = (int)    $str;  // 42
$float = (float)  $str;  // 42.7
$bool  = (bool)   $str;  // true
$arr   = (array)  $str;  // ['42.7']

echo $int;   // 42
echo $float; // 42.7

Funzione settype()

settype() modifica direttamente il tipo di una variabile e restituisce true/false:

<?php
$value = '123';
settype($value, 'integer');

var_dump($value); // int(123)

// Alternative: intval(), floatval(), strval() functions
$n = intval('0xFF', 16); // 255 — parse hex string

Casi limite nella conversione da stringa a numero

Regole principali per la conversione delle stringhe in numeri da parte di PHP:

  • Gli spazi iniziali vengono ignorati: ' 42 ' → 42
  • Prefisso non numerico: 'php8' → 0 (notifica di PHP 8)
  • Notazione scientifica: '1e3' → 1000.0
  • Stringhe esadecimali: '0x1A' NON vengono convertite automaticamente in int in PHP 7+

Regole di conversione booleana

Questi valori vengono convertiti in false; tutti gli altri diventano true:

<?php
$falsy = [false, 0, 0.0, '', '0', [], null];

foreach ($falsy as $v) {
    var_dump((bool) $v); // all bool(false)
}

// Careful:
var_dump((bool) '0');   // false — the STRING '0' is falsy!
var_dump((bool) '00');  // true  — only exactly '0' is falsy

intval() con basi

intval() accetta un parametro base facoltativo per analizzare le stringhe numeriche:

<?php
echo intval('0b1010', 2);  // 10  — binary
echo intval('077', 8);     // 63  — octal
echo intval('1F', 16);     // 31  — hexadecimal
echo intval('42');         // 42  — decimal (default base 10)

Miglioramenti alla conversione automatica dei tipi in PHP 8

PHP 8 ha risolto alcune incoerenze nella conversione automatica dei tipi presenti nelle versioni precedenti:

  • 0 == 'foo' ora è false (in PHP 7 era true)
  • Quando si confrontano numeri con stringhe non numeriche, la stringa non viene più convertita in 0
  • Questo rende PHP 8 più sicuro, ma può causare problemi nel codice legacy che dipendeva dal comportamento precedente

Evitare i problemi della conversione automatica dei tipi

Buone pratiche per evitare risultati inattesi dovuti alla conversione automatica dei tipi:

<?php
declare(strict_types=1);  // enforce types at function boundaries

// Always use === for comparisons
if ($status === 'active') { /* safe */ }

// Cast explicitly before arithmetic
$total = (float) $_POST['price'] * (int) $_POST['qty'];

// Validate with filter_var
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT);
if ($age === false) { /* invalid input */ }

Verifica rapida

A quale valore corrisponde (int) '42abc' in PHP?

Riepilogo: conversione automatica dei tipi

Ciò che ha imparato sulla gestione dei tipi in PHP:

  • PHP converte automaticamente i tipi nelle operazioni: questa è la conversione automatica dei tipi
  • == confronta i valori dopo la conversione automatica; === esegue un confronto stretto (tipo + valore)
  • Utilizzi le conversioni esplicite (int), (float), (string), (bool)
  • Utilizzi intval(), floatval(), strval() come alternative basate su funzioni
  • PHP 8 ha migliorato alcuni casi limite della conversione automatica dei tipi
  • Abiliti strict_types=1 per ridurre i risultati inattesi nel codice

Domande Frequenti

La lezione «Type juggling e type casting» è gratuita?

Sì — il testo completo di «Type juggling e type casting» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.

Cosa imparerò in «Type juggling e type casting»?

Comprendere come PHP converte automaticamente i tipi e come eseguire il casting manualmente. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare PHP Academy?

Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Type juggling e type casting»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione PHP Academy?

Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Dichiarare variabili in PHP
  2. Panoramica dei tipi di dati PHP
  3. Output con echo e print
  4. Type juggling e type casting
← Torna a PHP Academy