W3docs

is_scalar()

PHP is_scalar() verifica si una variable es entero, float, string o boolean. Devuelve false para arrays, objetos, NULL y recursos.

Introducción

is_scalar() es una función incorporada de PHP que indica si una variable contiene un valor escalar. Un escalar es un valor único y atómico — uno que no está construido a partir de otros valores. PHP tiene exactamente cuatro tipos escalares:

  • integer — números enteros, p. ej. 42
  • float (double) — números con punto decimal, p. ej. 3.14
  • string — texto, p. ej. "hello"
  • booleantrue o false

Todo lo demás es no escalar: los arrays y los objetos son compuestos (agrupan muchos valores), mientras que los valores NULL y resource son tipos especiales que is_scalar() reporta deliberadamente como false. Conocer esta distinción importa porque los valores escalares son seguros para imprimir, concatenar o almacenar directamente, mientras que los valores compuestos generalmente necesitan iterarse o inspeccionarse primero.

Sintaxis

is_scalar(mixed $value): bool

La función toma un único argumento, $value, y devuelve true cuando es un entero, float, string o boolean, y false para cualquier otro tipo — incluyendo arrays, objetos, NULL y recursos.

Ejemplo de uso

El siguiente ejemplo verifica una variable de cada tipo común:

php— editable, runs on the server

El string, el float y el boolean son todos escalares, por lo que devuelven true. El array es un tipo compuesto, por lo que devuelve false.

Consejo: var_dump() es más claro que echo para resultados booleanos. Con echo, true se imprime como 1 y false se imprime como una cadena vacía, lo cual puede malinterpretarse fácilmente. Consulta var_dump() para más información.

NULL, objetos y recursos no son escalares

Estos tres casos confunden a la gente con más frecuencia, porque intuitivamente parecen "simples", pero is_scalar() devuelve false para todos ellos:

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

Si también deseas tratar NULL como aceptable, verifícalo por separado: is_scalar($v) || is_null($v).

Usar is_scalar() como guardia

Un uso común es decidir si un valor puede imprimirse o concatenarse de forma segura. Los valores compuestos como los arrays no pueden convertirse directamente en un string (echo $array genera una advertencia), por lo que verificar primero evita errores:

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

Aquí gettype() reporta el tipo exacto de los valores no escalares, mientras que is_scalar() mantiene los valores imprimibles fuera de problemas.

is_scalar() vs. las verificaciones por tipo específico

is_scalar() es una conveniencia para "¿es este alguno de los cuatro tipos escalares?" Cuando te interesa un tipo específico, usa la función dedicada en su lugar:

FunciónDevuelve true para
is_int()solo enteros
is_float()solo floats
is_string()solo strings
is_bool()solo booleanos
is_scalar()entero o float o string o boolean

is_scalar() es equivalente a escribir is_int($v) || is_float($v) || is_string($v) || is_bool($v), pero es más corto y claro.

Conclusión

is_scalar() devuelve true solo para los cuatro tipos escalares — entero, float, string y boolean — y false para arrays, objetos, NULL y recursos. Es más útil como guardia antes de imprimir o concatenar un valor cuyo tipo no estás seguro. Cuando necesites verificar un tipo específico, recurre a is_int(), is_string() y similares; cuando solo necesites saber "¿es este un valor simple único?", is_scalar() es la herramienta adecuada.

Práctica

Práctica
¿Cuáles de los siguientes valores se consideran de tipo escalar en PHP según el artículo?
¿Cuáles de los siguientes valores se consideran de tipo escalar en PHP según el artículo?
Was this page helpful?