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" - boolean —
trueofalse
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): boolLa 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:
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 queechopara resultados booleanos. Conecho,truese imprime como1yfalsese 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ón | Devuelve 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.