# 2. Estruturas Condicionais e Repeticao

## Introdução

As estruturas de controle no PHP seguem a sintaxe clássica do C/C++, utilizando chaves `{}` para delimitar blocos de código.

## Estruturas Condicionais

{% stepper %}
{% step %}

#### if, else e elseif

```php
$status = 403;

if ($status == 200) {
    echo "Sucesso";
} elseif ($status == 403) {
    echo "Proibido";
} else {
    echo "Erro inesperado";
}
```

{% endstep %}

{% step %}

#### Switch Case

Útil para múltiplas verificações em uma única variável.

```php
switch ($servico) {
    case "ssh":
        $porta = 22;
        break;
    case "http":
        $porta = 80;
        break;
    default:
        $porta = 0;
}
```

{% endstep %}
{% endstepper %}

## Estruturas de Repetição (Loops)

{% stepper %}
{% step %}

#### For

Usado quando você sabe o número de iterações.

```php
for ($i = 0; $i < 5; $i++) {
    echo "Tentativa $i" . PHP_EOL;
}
```

{% endstep %}

{% step %}

#### While

Executa enquanto a condição for verdadeira.

```php
while ($conectado == false) {
    // Tentar conectar
}
```

{% endstep %}

{% step %}

#### Foreach (Trabalhando com Arrays)

A forma mais comum de percorrer listas e dicionários no PHP.

```php
$ips = ["127.0.0.1", "10.0.0.1"];

foreach ($ips as $ip) {
    echo "Escaneando: $ip";
}

// Com chave e valor
$config = ["db" => "root", "pass" => "123"];
foreach ($config as $chave => $valor) {
    echo "$chave: $valor";
}
```

{% endstep %}
{% endstepper %}

## Controle de Fluxo: Break e Continue

* **`break`:** Sai do loop imediatamente.
* **`continue`:** Pula para a próxima iteração.

## Operadores Lógicos

| Operador              | Ação                     |
| --------------------- | ------------------------ |
| **`&&`** ou **`and`** | E (Ambas verdadeiras)    |
| \*\*\`                |                          |
| **`!`**               | NÃO (Inverte a condição) |

{% hint style="warning" %}
No contexto de segurança web, os condicionais são os locais onde ocorrem as validações de input. Um erro na lógica de um `if` (ex: usar `==` em vez de `===`) pode permitir o bypass de autenticação.
{% endhint %}


---

# 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/2.-estruturas-condicionais-e-repeticao.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.
