W3docs

is_string()

La funzione is_string() di PHP verifica se una variabile è di tipo string. Scopri sintassi, esempi pratici e differenze con is_numeric().

Introduzione

is_string() è una funzione PHP integrata che indica se un valore è di tipo string. Una string è un tipo di dato che contiene una sequenza di caratteri, come "hello" o "42".

Poiché PHP è debolmente tipizzato, il tipo di un valore dipende spesso dalla sua provenienza — input di un modulo, un database, un payload JSON o il valore restituito da una funzione. is_string() consente di verificare che un valore sia davvero una string prima di chiamare su di esso operazioni riservate alle stringhe (come strtoupper() o substr()), evitando così errori di tipo e risultati inaspettati.

Questa pagina illustra la sintassi, cosa restituisce is_string() per ciascun tipo PHP, il comune problema delle "stringhe numeriche" e le differenze rispetto a funzioni correlate come is_numeric() e gettype().

Sintassi

is_string(mixed $value): bool
  • $value — la variabile o l'espressione da testare.
  • Restituiscetrue se $value è una string, false per qualsiasi altro tipo.

is_string() controlla il tipo, non il contenuto. Ispeziona sempre un solo valore alla volta senza mai convertirlo.

Esempio base

php— editable, runs on the server

$var1 è una string, quindi is_string() restituisce true; $var2 è un float, quindi restituisce false.

Suggerimento: Usa var_dump() invece di echo quando stai testando risultati booleani. echo true stampa 1, ma echo false non stampa nulla — il che rende facile non accorgersi di un risultato false. var_dump() mostra esplicitamente bool(true) / bool(false).

Cosa restituisce is_string() per ciascun tipo

Solo le stringhe vere e proprie superano il controllo — numeri, booleani, null e array restituiscono tutti false, anche quando sembrano simili a una string.

<?php
var_dump(is_string("hello"));      // bool(true)
var_dump(is_string("42"));         // bool(true)  — a digit string is still a string
var_dump(is_string(42));           // bool(false) — integer
var_dump(is_string(3.14));         // bool(false) — float
var_dump(is_string(true));         // bool(false) — boolean
var_dump(is_string(null));         // bool(false) — null
var_dump(is_string(['a', 'b']));   // bool(false) — array
?>

Il punto chiave: is_string("42") è true. Le virgolette la rendono una string di cifre, non un numero.

Utilizzo pratico: controllo prima delle operazioni sulle stringhe

Un utilizzo tipico è la validazione di un valore prima di eseguire funzioni sulle stringhe, in modo che un input non attendibile o di tipo misto non possa causare un TypeError.

<?php
function shout($value): string {
    if (!is_string($value)) {
        return "Not a string";
    }
    return strtoupper($value) . "!";
}

echo shout("hello") . "\n"; // HELLO!
echo shout(123) . "\n";     // Not a string
?>

is_string() vs. is_numeric()

Queste due funzioni vengono spesso confuse perché le stringhe numeriche si collocano a metà strada. is_string() chiede "questo valore è di tipo string?", mentre is_numeric() chiede "questo valore rappresenta un numero?" — e una string numerica risponde a entrambe.

<?php
$value = "42";

var_dump(is_string($value));  // bool(true)  — it IS a string
var_dump(is_numeric($value)); // bool(true)  — and it looks like a number
?>

Se hai bisogno specificamente di un tipo integer o float anziché di una string, usa is_int() o is_float(). Per convertire un valore in string invece di limitarsi a controllarlo, consulta settype() o strval().

Conclusione

is_string() è un controllo di tipo semplice e affidabile: restituisce true solo per valori che sono genuinamente di tipo string e false per tutto il resto. Usala ogni volta che devi essere sicuro che un valore sia una string prima di applicare operazioni sulle stringhe — ad esempio quando gestisci input dell'utente, risposte API o dati il cui tipo non è garantito. Ricorda i due aspetti critici: un numero tra virgolette come "42" è una string, e dovresti esaminare i risultati con var_dump() anziché con echo per evitare che un false scompaia. Per controlli correlati, esplora is_numeric(), is_int(), is_array() e gettype().

Esercizio

Pratica
Quali delle seguenti affermazioni su 'is_string' in PHP sono vere?
Quali delle seguenti affermazioni su 'is_string' in PHP sono vere?
Was this page helpful?