W3docs

is_countable()

La funzione is_countable() è una funzione integrata in PHP che verifica se una variabile è numerabile. È stata introdotta in PHP 7.3 come costrutto del linguaggio.

Introduzione

La funzione is_countable() è una funzione integrata in PHP che verifica se una variabile è numerabile — ovvero, se può essere passata in modo sicuro a count(). Un valore è numerabile quando è un array o un oggetto che implementa l'interfaccia Countable. La funzione restituisce true in questi due casi e false per tutto il resto.

È stata introdotta in PHP 7.3 per risolvere un problema concreto. A partire da PHP 7.2, chiamare count() su un valore che non è un array o un oggetto Countable genera un avviso (e in PHP 8.0 è diventato un TypeError). Prima che is_countable() esistesse, era necessario scrivere is_array($x) || $x instanceof Countable manualmente come protezione. Questa funzione rende tale controllo una singola chiamata leggibile.

Questa pagina tratta la sintassi, il valore restituito, un esempio funzionante, il comune pattern "safe count" e i possibili problemi da tenere a mente.

Sintassi

La sintassi della funzione is_countable() è la seguente:

La sintassi PHP di is_countable()

mixed is_countable(mixed $var)

Nota: il tipo mixed richiede PHP 8.0+. In PHP 7.3, la firma è semplicemente is_countable($var).

La funzione accetta un singolo parametro, $var, la variabile da verificare.

Valore restituito

is_countable() restituisce sempre un boolean e non genera mai un errore, indipendentemente da ciò che le viene passato:

$varRestituisce
Array (es. [1, 2, 3] o [])true
Oggetto che implementa Countabletrue
String, integer, float, booleanfalse
nullfalse
Oggetto semplice (es. new stdClass())false

L'array vuoto [] è comunque numerabile — l'essere numerabile riguarda il tipo, non se il valore contiene elementi.

Esempio d'uso

Ecco un esempio di come utilizzare la funzione is_countable() in PHP:

Esempio di PHP is_countable()

<?php
$var1 = ["apple", "banana", "orange"];
$var2 = "hello";
$var3 = new stdClass();
$var4 = 42;
var_dump(is_countable($var1)); // output: bool(true)
var_dump(is_countable($var2)); // output: bool(false)
var_dump(is_countable($var3)); // output: bool(false)
var_dump(is_countable($var4)); // output: bool(false)

class MyCountable implements Countable {
    public function count(): int { return 5; }
}
$countableObj = new MyCountable();
var_dump(is_countable($countableObj)); // output: bool(true)
?>

In questo esempio definiamo quattro variabili con tipi di dati diversi: $var1 è un array, $var2 è una string, $var3 è un oggetto semplice e $var4 è un integer. Usiamo poi is_countable() per verificare ciascuna. Solo $var1 (un array) è numerabile. Si noti che $var3 è false anche se è un oggetto — un semplice stdClass non implementa Countable. L'ultimo esempio mostra che MyCountable, che implementa l'interfaccia Countable, viene riconosciuto come numerabile.

Il pattern "safe count"

Il motivo più comune per ricorrere a is_countable() è proteggere una chiamata a count() da valori che potrebbero non essere numerabili — ad esempio dati provenienti da un'API, un database o input dell'utente dove un campo potrebbe essere null, una string o un array assente:

Proteggere count() con is_countable()

<?php
function safeCount(mixed $value): int {
    return is_countable($value) ? count($value) : 0;
}

echo safeCount(["a", "b", "c"]), "\n"; // output: 3
echo safeCount("not an array"), "\n";  // output: 0
echo safeCount(null), "\n";            // output: 0
?>

Senza la protezione, count("not an array") genera un TypeError in PHP 8.0+. is_countable() permette di ricorrere a un valore predefinito sensato invece di causare un crash.

Problemi comuni

  • Un oggetto semplice non è numerabile. is_countable(new stdClass()) è false. L'oggetto deve implementare l'interfaccia Countable affinché il controllo passi.
  • Le string non sono mai numerabili, anche se hanno una lunghezza. Usare strlen() per i caratteri, non count().
  • Controlla solo il tipo, non la profondità. is_countable() non fornisce informazioni sugli array annidati — count() stesso accetta un argomento $mode per il conteggio ricorsivo.
  • Prima di PHP 7.3 è possibile replicare il controllo con is_array($var) || $var instanceof Countable.

Funzioni correlate

  • count() — conta gli elementi di un valore numerabile; la funzione che is_countable() è destinata a proteggere.
  • is_array() — controllo più ristretto solo per il caso degli array.
  • is_object() — verifica se un valore è un qualsiasi oggetto (numerabile o meno).
  • gettype() — restituisce il nome del tipo di una variabile.

Conclusione

La funzione is_countable() è uno strumento utile per verificare se una variabile è numerabile in PHP. Può essere utilizzata per evitare errori che possono verificarsi quando si tenta di contare variabili non numerabili, come string o oggetti. Usando questa funzione, gli sviluppatori possono assicurarsi che il proprio codice lavori esclusivamente con variabili numerabili, rendendo il codice più efficiente e affidabile.

Esercizio

Pratica
Cosa fa la funzione is_countable() in PHP?
Cosa fa la funzione is_countable() in PHP?
Was this page helpful?