# PHP para Iniciantes: Tipos de Dados Primitivos - Textos Numéricos

Se você acompanhou todos os artigos até aqui, muitíssimo obrigado por sua ilustre presença! É bem provável que pensou que os tipos de dados haviam se esgotado, não é? Na verdade, você está certo. Não existe um tipo de dados que descreve um `texto numérico` (`number`? **nah**).

Porém, há um recurso no interpretador que consegue identificar um dado `string` como número, se escrito com a sintaxe correta. Esse assunto poderia ser conteúdo de um desses tipos mas achei melhor deixar para comentar agora, até para podermos explorar um pouco mais. Vamo nessa?

## O que é um texto numérico?

Como o próprio nome diz, é um dado `string` que representa um número. Por exemplo:
```php
<?php

echo "123";
echo "12.3";
echo "10000";
```

Sua definição é extremamente simples, não? Afinal, até aqui você conheceu números inteiros e ponto flutuante, então já conhece suas sintaxes.

> Ok... E onde está a pegadinha, Kiko?

Hehehehe, pode parecer piada mas é sério. Essas tratativas existem pois muitas vezes precisamos manipular tipos de dados misturados e fazer operações matemáticas com pequenas partes dos dados. Isso se aplica, com toda certeza, em datas.

Por exemplo, quando você tem um campo data com o valor `'1990-01-01'` e você quer acrescentar 10 anos, **sem usar nenhuma função de manipulação de data**, o caminho que você precisaria fazer em outras linguagens seria:

- capturar o primeiro pedaço da informação, que é o ano;
- converter em número;
- somar 10;
- converter em texto;
- substituir o valor no campo.

Porém, o interpretador consegue fazer esses castings sem você precisar lidar com isso manualmente. Ou seja, reduzindo para:

- capturar o pedaço da informação;
- somar 10;
- substituir o valor no campo.

```php
<?php
// o dado:
$data = '1990-01-01';

// função explode: quebra o texto em pedaços baseado no subtexto informado
$data = explode('-', $data); // no caso, quebra a cada '-', resultando no array ['1990', '01', '01']
// isso serve pra facilitar a captura da informação

 // soma 10 ao dado no primeiro índice, que é a string '1990', a informação capturada
$data[0] += 10; // ficando [2000, '01', '01'], onde o primeiro mudou de `string` pra `int`

// função implode: junta todos os elementos do array pelo texto informado
$data = implode('-', $data); // no caso, junta cada elemento com '-', resultando no texto '2000-01-01'

// impressão do resultado
echo $data;
```

Portanto, tem sim alguma utilidade, concorda?

> Tá... Mas é só isso, Kiko?

**Não!** Tem uns detalhes bem loucos que eu fiquei pensando muito se valia a pena mencionar, mas já que está na documentação, vamos falar. Primeiramente, de todas as sintaxes dos números inteiros, **apenas a escrita decimal é considerada nos textos numéricos**. Por exemplo, `'0b10'` não entra na regra.

Já no caso dos pontos flutuantes, é possível escrever exponenciais da mesma forma `'123e3'`.

Além de tudo isso, ainda tem o conceito de `leading numbers`, que na tradução literal significa `números principais`, mas o significado é `números à esquerda`. Com isso, fica evidente que o PHP é capaz de pegar uma parte da string e operar como número independente do resto dos dados, desde que estejam separados por espaço em branco.

Por exemplo:
```php
<?php

echo 1 + "12 feijão com arroz 34 feijão no prato (...)";
```

- No PHP 8+, você receberá um `E_WARNING` (o que indica que nas próximas versões será considerado um ERRO) e, logo abaixo, o valor `13`, resultante da soma `1 + 12`;
- No PHP 7.x, receberá um `E_NOTICE` (que é menos que um aviso e não é tão prejudicial - apenas deixando claro que você está fazendo alguma gambiarra) e o mesmo resultado, `13`, da mesma soma;
- Em versões anteriores, somente o resultado (...).

> Mas Kiko, o que acontece com o `34`?

Nada. Ao identificar um espaço em branco, o interpretador percebe que nem toda informação presente no texto representa um número. Por tanto, ele pega os `números à esquerda` e ignora todo o resto, resumindo tudo a `1 + 12`.

> E se antes viesse o texto?

```php
<?php

echo 1 + "(...) 34 feijão no prato (...)";
```

- No PHP 8+, `FatalError` (ops);
- No PHP 7.x, um `E_WARNING` por não conseguir extrair nenhum número, e então converter o texto inteiro para `0` e imprimir `1`;
- Em versões anteriores, somente `1`.

Então não, o interpretador não vai perder tempo procurando número pra fazer uma soma, rs. O interessante é que o `espaço em branco` é uma exceção nesses casos. Se você colocar um espaço em branco antes do número, a sequência de números será considerada `trailing numbers`, que é literalmente `números à direita`.

Por exemplo:
```php
<?php

echo 1 + " 34 feijão no prato (...)";
```

Nesse caso, irá operar como se o espaço em branco não existe, dando o mesmo resultado de quando o texto começa com os números.

> Ok... E onde isso é útil, Kiko?

Aí eu já não sei, hahahaha. Se o PHP 8 já te dá `WARNING` por isso, é melhor nem pensar em uma forma de aplicar. Só finge que não sabe que existe... E se encontrar, corrija!

Curtiu? Comenta e compartilha! Vamos compartilhar todo conhecimento possível. Inclusive, se você está estudando algumas outras coisas, quero te pedir encarecidamente que crie seu próprio blog no <hashnode.com>! Precisamos trazer mais conteúdo **pt-BR** pra galera.

**Inté!**
