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:
$var | Restituisce |
|---|---|
Array (es. [1, 2, 3] o []) | true |
Oggetto che implementa Countable | true |
| String, integer, float, boolean | false |
null | false |
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'interfacciaCountableaffinché il controllo passi. - Le string non sono mai numerabili, anche se hanno una lunghezza. Usare
strlen()per i caratteri, noncount(). - Controlla solo il tipo, non la profondità.
is_countable()non fornisce informazioni sugli array annidati —count()stesso accetta un argomento$modeper 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 cheis_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.