W3docs

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"
  • booleantrue ou false

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): bool

A 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:

php— editable, runs on the server

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 que echo para resultados booleanos. Com echo, true é impresso como 1 e false como 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çãoRetorna 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.

Prática

Prática
Quais dos seguintes valores são considerados tipo de dado escalar em PHP de acordo com o artigo?
Quais dos seguintes valores são considerados tipo de dado escalar em PHP de acordo com o artigo?
Was this page helpful?