W3docs

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"
  • booleantrue o false

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): bool

La 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:

php— editable, runs on the server

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 di echo per i risultati boolean. Con echo, true viene stampato come 1 e false come 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:

FunzioneRestituisce 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.

Pratica

Pratica
Quali dei seguenti valori sono considerati tipi di dati scalari in PHP secondo l'articolo?
Quali dei seguenti valori sono considerati tipi di dati scalari in PHP secondo l'articolo?
Was this page helpful?