# 1. Variaveis e Tipagem

## Introdução

No PHP, todas as variáveis começam obrigatoriamente com o símbolo de cifrão (`$`). O PHP é uma linguagem de **tipagem fraca (loose typing)** e **dinâmica**, o que significa que ele converte tipos automaticamente conforme a necessidade, o que pode levar a comportamentos inesperados e vulnerabilidades.

## Definição e Atribuição

O PHP usa o sinal `=` para atribuição.

```php
$alvo = "10.0.0.1";    // String
$porta = 80;           // Integer
$online = true;        // Boolean
$versao = 1.1;         // Float
```

* **Sensibilidade:** Nomes de variáveis são Case-Sensitive (`$var` != `$VAR`).
* **Nomenclatura:** Geralmente segue `camelCase` ou `snake_case`.

## Tipos de Dados Básicos

### 1. Strings

Sequências de caracteres.

* **Aspas Duplas (`"`):** Interpretam variáveis dentro da string (`"Alvo: $alvo"`).
* **Aspas Simples (`'`):** Tratam tudo como texto literal (`'Alvo: $alvo'`).
* **Concatenação:** Usa-se o ponto (`.`) em vez do `+`.

```php
echo "Host: " . $alvo;
```

### 2. Inteiros (int) e Floats

Números sem e com casas decimais.

### 3. Booleanos (bool)

`true` ou `false`. No PHP, o valor `0`, uma string vazia `""`, ou um array vazio são avaliados como `false`.

### 4. Arrays

Podem ser indexados (numéricos) ou associativos (chave-valor).

```php
$alvos = array("10.0.0.1", "10.0.0.2");
$servico = ["nome" => "HTTP", "porta" => 80]; // Sintaxe curta
```

## Tipagem Fraca e "Type Juggling" (Atenção Pentester!)

O PHP tenta ser "esperto" e converter tipos automaticamente. Isso é conhecido como **Type Juggling**.

### Comparação Solta (`==`) vs Estrita (`===`)

* **`==` (Igual):** Compara apenas os valores após a conversão de tipo.
* **`===` (Idêntico):** Compara o valor **e** o tipo.

**O perigo:**

```php
if ("0" == 0)      // True
if ("10 administradores" == 10) // True (O PHP extrai o 10 da string)
if (true == "qualquer coisa")    // True
```

> Muitos sistemas de autenticação legados foram quebrados porque usavam `==` para comparar hashes ou tokens, permitindo que um atacante passasse um valor bool ou inteiro para burlar a verificação.

## Constantes

Valores que não mudam durante a execução. Definidas com `define()` ou `const`.

```php
define("TIMEOUT", 30);
echo TIMEOUT; // Sem o $
```

## Escopo

* **Local:** Dentro de uma função.
* **Global:** Fora de todas as funções. Para acessar no interior de uma função, use a palavra-chave `global $var;`.
* **Static:** Mantém o valor mesmo após o fim da função.

> Use a função `gettype($var)` para checar o tipo atual e `var_dump($var)` para depurar o conteúdo e o tipo de forma detalhada.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/programacao-e-linguagens/php/1.-variaveis-e-tipagem.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
