is_scalar()
PHP is_scalar() verifica se una variabile è un intero, float, string o boolean. Restituisce false per array, oggetti, NULL e risorse.
Introduzione
is_scalar() è una funzione PHP integrata che indica se una variabile contiene un valore scalare. Uno scalare è un valore singolo e atomico — uno che non è composto da altri valori. PHP ha esattamente quattro tipi scalari:
- integer — numeri interi, es.
42 - float (double) — numeri con virgola decimale, es.
3.14 - string — testo, es.
"hello" - boolean —
trueofalse
Tutto il resto è non scalare: gli array e gli oggetti sono composti (raggruppano molti valori), mentre i valori NULL e resource sono tipi speciali che is_scalar() riporta deliberatamente come false. Conoscere questa distinzione è importante perché i valori scalari sono sicuri da stampare, concatenare o memorizzare direttamente, mentre i valori composti di solito devono essere iterati o ispezionati prima.
Sintassi
is_scalar(mixed $value): boolLa funzione accetta un singolo argomento, $value, e restituisce true quando è un intero, float, string o boolean, e false per ogni altro tipo — inclusi array, oggetti, NULL e risorse.
Esempio d'uso
L'esempio seguente verifica una variabile per ciascun tipo comune:
La string, il float e il boolean sono tutti scalari, quindi restituiscono true. L'array è un tipo composto, quindi restituisce false.
Suggerimento:
var_dump()è più chiaro diechoper i risultati boolean. Conecho,trueviene stampato come1efalsecome stringa vuota, il che può essere facilmente frainteso. Vedi var_dump() per saperne di più.
NULL, oggetti e risorse non sono scalari
Questi tre casi sono quelli che creano più confusione, perché intuitivamente sembrano "semplici", ma is_scalar() restituisce false per tutti:
<?php
var_dump(is_scalar(null)); // bool(false) — NULL is its own type
var_dump(is_scalar(new stdClass())); // bool(false) — objects are compound
$handle = fopen("php://memory", "r");
var_dump(is_scalar($handle)); // bool(false) — a file resource
fclose($handle);
?>Se si vuole trattare anche NULL come accettabile, verificarlo separatamente: is_scalar($v) || is_null($v).
Usare is_scalar() come guardia
Un utilizzo comune è decidere se un valore può essere stampato o concatenato in sicurezza. I valori composti come gli array non possono essere convertiti direttamente in stringa (echo $array genera un avviso), quindi verificare prima previene gli errori:
<?php
function describe(mixed $value): string
{
if (is_scalar($value)) {
return "scalar value: $value";
}
return "non-scalar value of type " . gettype($value);
}
echo describe(42), "\n"; // scalar value: 42
echo describe([1, 2]), "\n"; // non-scalar value of type array
echo describe(null), "\n"; // non-scalar value of type NULL
?>Qui gettype() riporta il tipo esatto dei valori non scalari, mentre is_scalar() mantiene quelli stampabili al sicuro.
is_scalar() vs. i controlli specifici per tipo
is_scalar() è una comodità per "è questo uno qualsiasi dei quattro tipi scalari?" Quando si è interessati a un tipo specifico, usare invece la funzione dedicata:
| Funzione | Restituisce true per |
|---|---|
is_int() | solo interi |
is_float() | solo float |
is_string() | solo string |
is_bool() | solo boolean |
is_scalar() | integer o float o string o boolean |
is_scalar() è equivalente a scrivere is_int($v) || is_float($v) || is_string($v) || is_bool($v), ma è più breve e chiaro.
Conclusione
is_scalar() restituisce true solo per i quattro tipi scalari — integer, float, string e boolean — e false per array, oggetti, NULL e risorse. È più utile come guardia prima di stampare o concatenare un valore di cui non si è sicuri del tipo. Quando si deve verificare un tipo specifico, usare is_int(), is_string() e simili; quando si ha solo bisogno di sapere "questo è un valore singolo semplice?", is_scalar() è lo strumento giusto.