W3docs

is_countable()

La función is_countable() es una función integrada de PHP que verifica si una variable es contable. Se introdujo en PHP 7.3 como construcción del lenguaje.

Introducción

La función is_countable() es una función integrada de PHP que verifica si una variable es contable, es decir, si puede pasarse de forma segura a count(). Un valor es contable cuando es un array o un objeto que implementa la interfaz Countable. La función devuelve true en esos dos casos y false en cualquier otro.

Se introdujo en PHP 7.3 para resolver un problema real. A partir de PHP 7.2, llamar a count() sobre un valor que no es un array u objeto Countable emite una advertencia (y en PHP 8.0 se convirtió en un TypeError). Antes de que existiera is_countable(), había que escribir is_array($x) || $x instanceof Countable manualmente para protegerse de eso. Esta función convierte esa verificación en una llamada única y legible.

Esta página cubre la sintaxis, el valor de retorno, un ejemplo funcional, el patrón habitual de "conteo seguro" y los problemas a tener en cuenta.

Sintaxis

La sintaxis de la función is_countable() es la siguiente:

Sintaxis PHP de is_countable()

mixed is_countable(mixed $var)

Nota: La indicación de tipo mixed requiere PHP 8.0+. En PHP 7.3, la firma es simplemente is_countable($var).

La función recibe un único parámetro, $var, la variable a verificar.

Valor de retorno

is_countable() siempre devuelve un boolean y nunca lanza un error, independientemente de lo que se le pase:

$varRetorna
Array (p. ej. [1, 2, 3] o [])true
Objeto que implementa Countabletrue
string, entero, float, booleanfalse
nullfalse
Objeto simple (p. ej. new stdClass())false

El array vacío [] sigue siendo contable — ser contable tiene que ver con el tipo, no con si el valor contiene elementos.

Ejemplo de uso

A continuación se muestra un ejemplo de cómo usar la función is_countable() en PHP:

Ejemplo de is_countable() en PHP

<?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)
?>

En este ejemplo, definimos cuatro variables con distintos tipos de datos: $var1 es un array, $var2 es un string, $var3 es un objeto simple y $var4 es un entero. Luego usamos is_countable() para verificar cada una. Solo $var1 (un array) es contable. Nótese que $var3 es false aunque sea un objeto — un stdClass simple no implementa Countable. El último ejemplo muestra que MyCountable, que implementa la interfaz Countable, es reconocida como contable.

El patrón de "conteo seguro"

La razón más habitual para usar is_countable() es proteger una llamada a count() frente a valores que podrían no ser contables — por ejemplo, datos provenientes de una API, una base de datos o entradas del usuario donde un campo podría ser null, un string o un array ausente:

Proteger 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
?>

Sin la protección, count("not an array") lanza un TypeError en PHP 8.0+. is_countable() permite recurrir a un valor predeterminado sensato en lugar de fallar.

Problemas a tener en cuenta

  • Un objeto simple no es contable. is_countable(new stdClass()) es false. El objeto debe implementar la interfaz Countable para que la verificación pase.
  • Los strings nunca son contables, aunque tengan una longitud. Usa strlen() para caracteres, no count().
  • Solo verifica el tipo, no la profundidad. is_countable() no informa nada sobre arrays anidados — el propio count() acepta un argumento $mode para el conteo recursivo.
  • Antes de PHP 7.3 puedes replicar la verificación con is_array($var) || $var instanceof Countable.

Funciones relacionadas

  • count() — cuenta los elementos de un valor contable; la función que is_countable() está diseñada para proteger.
  • is_array() — verificación más estrecha solo para el caso de los arrays.
  • is_object() — verifica si un valor es cualquier objeto (contable o no).
  • gettype() — obtiene el nombre del tipo de una variable.

Conclusión

La función is_countable() es una herramienta útil para verificar si una variable es contable en PHP. Puede usarse para evitar errores que pueden ocurrir al intentar contar variables no contables, como strings u objetos. Al usar esta función, los desarrolladores pueden asegurarse de que su código trabaje únicamente con variables contables, haciendo el código más eficiente y confiable.

Práctica

Práctica
¿Qué hace la función is_countable() en PHP?
¿Qué hace la función is_countable() en PHP?
Was this page helpful?