is_scalar()
A função PHP is_scalar() verifica se uma variável é inteiro, float, string ou boolean. Retorna false para arrays, objetos, NULL e recursos.
Introdução
is_scalar() é uma função PHP nativa que informa se uma variável contém um valor escalar. Um escalar é um valor único e atômico — que não é construído a partir de outros valores. O PHP possui exatamente quatro tipos escalares:
- integer — números inteiros, ex.:
42 - float (double) — números com ponto decimal, ex.:
3.14 - string — texto, ex.:
"hello" - boolean —
trueoufalse
Tudo o mais é não-escalar: arrays e objetos são compostos (agrupam muitos valores), enquanto os valores NULL e resource são tipos especiais que is_scalar() deliberadamente reporta como false. Conhecer essa distinção é importante porque valores escalares são seguros para imprimir, concatenar ou armazenar diretamente, enquanto valores compostos geralmente precisam ser percorridos ou inspecionados primeiro.
Sintaxe
is_scalar(mixed $value): boolA função recebe um único argumento, $value, e retorna true quando se trata de um inteiro, float, string ou boolean, e false para todos os demais tipos — incluindo arrays, objetos, NULL e recursos.
Exemplo de Uso
O exemplo a seguir verifica uma variável de cada tipo comum:
A string, o float e o boolean são todos escalares, portanto retornam true. O array é um tipo composto, portanto retorna false.
Dica:
var_dump()é mais claro do queechopara resultados booleanos. Comecho,trueé impresso como1efalsecomo uma string vazia, o que pode ser facilmente confundido. Veja var_dump() para mais informações.
NULL, objetos e recursos não são escalares
Esses três casos costumam confundir as pessoas, pois intuitivamente parecem "simples", mas is_scalar() retorna false para todos eles:
<?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);
?>Se você também quiser tratar NULL como aceitável, verifique-o separadamente: is_scalar($v) || is_null($v).
Usando is_scalar() como guarda
Um uso comum é decidir se um valor pode ser impresso ou concatenado com segurança. Valores compostos como arrays não podem ser convertidos diretamente em string (echo $array gera um aviso), então verificar primeiro evita erros:
<?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
?>Aqui gettype() reporta o tipo exato dos valores não-escalares, enquanto is_scalar() mantém os imprimíveis livres de problemas.
is_scalar() vs. as verificações por tipo específico
is_scalar() é uma conveniência para "este valor é algum dos quatro tipos escalares?". Quando você precisa verificar um tipo específico, use a função dedicada:
| Função | Retorna true para |
|---|---|
is_int() | somente inteiros |
is_float() | somente floats |
is_string() | somente strings |
is_bool() | somente booleanos |
is_scalar() | inteiro ou float ou string ou boolean |
is_scalar() é equivalente a escrever is_int($v) || is_float($v) || is_string($v) || is_bool($v), mas é mais curto e claro.
Conclusão
is_scalar() retorna true apenas para os quatro tipos escalares — inteiro, float, string e boolean — e false para arrays, objetos, NULL e recursos. É mais útil como uma verificação antes de imprimir ou concatenar um valor cujo tipo você não tem certeza. Quando precisar verificar um tipo específico, use is_int(), is_string() e similares; quando precisar apenas saber "este é um valor simples e único?", is_scalar() é a ferramenta certa.