PHP: mais alguns conceitos importantes da linguagem
Published: 2023-07-25 15:16:44

## Tópicos
&nbsp;1. [Introdução](#introdu%C3%A7%C3%A3o)
&nbsp;2. [Funções em PHP](#fun%C3%A7%C3%B5es-em-php)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1. [Funções](#fun%C3%A7%C3%B5es)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2. [Funções Anônimas](#fun%C3%A7%C3%B5es-an%C3%B4nimas)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.3. [Arrow Functions (Funções Flecha)](#arrow-functions-fun%C3%A7%C3%B5es-flecha)
&nbsp;3. [Manipulação de Arquivos em PHP](#manipula%C3%A7%C3%A3o-de-arquivos-em-php)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.1. [Leitura de Arquivos](#leitura-de-arquivos)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.2. [Escrita em Arquivos](#escrita-em-arquivos)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.3. [Manipulador de Arquivo e Ponteiro de Arquivo](#manipulador-de-arquivo-e-ponteiro-de-arquivo)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. [Modos de Abertura de Arquivo](#modos-de-abertura-de-arquivo)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.4. [Função fclose() e fechamento de arquivos](#fun%C3%A7%C3%A3o-raw-fclose-endraw-e-fechamento-de-arquivos)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.5. [Função file()](#fun%C3%A7%C3%A3o-raw-file-endraw-)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.6. [Função unlink()](#fun%C3%A7%C3%A3o-raw-unlink-endraw-)
&nbsp;4. [Manipulação de Arquivos CSV em PHP](#manipula%C3%A7%C3%A3o-de-arquivos-csv-em-php)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.1. [Função fgetcsv()](#fun%C3%A7%C3%A3o-raw-fgetcsv-endraw-)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2. [Função str_getcsv](#fun%C3%A7%C3%A3o-strgetcsv)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.3. [Função fputcsv()](#fun%C3%A7%C3%A3o-raw-fputcsv-endraw-)
&nbsp;5. [Manipulação de Strings em PHP](#manipula%C3%A7%C3%A3o-de-strings-em-php)
&nbsp;6. [Includes e Requires](#includes-e-requires)
&nbsp;7. [Manipulação de Datas em PHP](#manipula%C3%A7%C3%A3o-de-datas-em-php)

## Introdução

Neste artigo vamos explorar mais alguns conceitos e funções importantes do PHP que são amplamente utilizados quando construímos Aplicações Web com esta linguagem.

---

## Funções em PHP

Em PHP, as funções são blocos de código reutilizáveis que podem ser chamados em diferentes partes do código para executar uma tarefa específica. Elas ajudam a organizar e modularizar o código, tornando-o mais legível e fácil de manter.

### Funções

Em PHP podemos criar funções comuns com nomes específicos. Essas funções podem receber parâmetros e retornar valores, permitindo uma maior modularização e organização do código.

Exemplo de criação e chamada de função comum:

```php
// Função que retorna a soma de dois números
function somar($a, $b) {
    return $a + $b;
}

// Chamada da função e atribuição do resultado a uma variável
$resultado = somar(5, 3);

echo $resultado; // Saída: 8
```

### Funções Anônimas

Uma função anônima é uma função que não possui um nome associado a ela. Elas são úteis quando você precisa de uma função temporária ou como argumento para outras funções, como em callbacks. Em PHP, as funções anônimas são criadas usando a palavra-chave `function` sem um nome seguido de parênteses e chaves para delimitar o bloco de código.

Exemplo de função anônima:

```php
$add = function ($a, $b) {
    return $a + $b;
};

$result = $add(5, 3); // Chama a função anônima e atribui o resultado a $result
echo $result; // Saída: 8
```

### Arrow Functions (Funções Flecha)

As arrow functions foram introduzidas no PHP 7.4 e são uma forma mais concisa de definir funções anônimas com apenas uma expressão. Elas permitem que você escreva funções de forma mais sucinta usando uma sintaxe reduzida.

Exemplo de arrow function:

```php
$add = fn($a, $b) => $a + $b;

$result = $add(5, 3);
echo $result; // Saída: 8
```

---

## Manipulação de Arquivos em PHP

PHP oferece diversas funções para a manipulação de arquivos, permitindo que você leia e escreva em arquivos, verifique informações de arquivos e diretórios, crie e exclua arquivos e diretórios, entre outras operações.

### Leitura de Arquivos

Para ler o conteúdo de um arquivo em PHP, você pode utilizar a função `file_get_contents()` ou `fopen()` combinada com `fread()`.

Exemplo de leitura de arquivo com `file_get_contents()`:

```php
$conteudo = file_get_contents('arquivo.txt');
echo $conteudo;
```

Esta função abre o arquivo, lê seu conteúdo, fecha o arquivo e retorna o seu conteúdo.

Exemplo de leitura de arquivo com `fopen()` e `fread()`:

```php
$handle = fopen('arquivo.txt', 'r');
$conteudo = fread($handle, filesize('arquivo.txt'));
fclose($handle);
echo $conteudo;
```

### Escrita em Arquivos

Para escrever em um arquivo em PHP, você pode usar a função `file_put_contents()` ou `fopen()` combinada com `fwrite()`.

Exemplo de escrita em arquivo com `file_put_contents()`:

```php
$conteudo = 'Este é um texto para escrever no arquivo.';
file_put_contents('arquivo.txt', $conteudo);
```

A função `file_put_contents()` **apaga o conteúdo do arquivo** e o substitui pelo conteúdo que está sendo passado como argumento.

Exemplo de escrita em arquivo com `fopen()` e `fwrite()`:

```php
$handle = fopen('arquivo.txt', 'w');
$conteudo = 'Este é um texto para escrever no arquivo.';
fwrite($handle, $conteudo);
fclose($handle);
```

### Manipulador de Arquivo e Ponteiro de Arquivo

Quando nos exemplos anteriores utilizamos a função `fopen()` para abrir um arquivo em PHP, ela retorna um manipulador de arquivo, que é um recurso que representa o arquivo aberto. Esse manipulador de arquivo é usado posteriormente em outras funções de leitura e escrita para realizar operações no arquivo.

O ponteiro de arquivo é uma posição interna que indica a posição atual de leitura ou escrita no arquivo. Quando você abre um arquivo usando `fopen()`, o ponteiro de arquivo é posicionado no início do arquivo por padrão. À medida que você lê ou escreve no arquivo, o ponteiro de arquivo é movido para a próxima posição. Isso permite que você leia ou escreva dados em posições específicas do arquivo. 

No exemplo anterior utilizamos a função `filesize()` para recuperar o tamanho em bytes do arquivo, de forma que lemos o arquivo completo de uma única vez. Mas também é possível utilizar a função `fread()` para ler parte do arquivo:

```php
$handle = fopen('arquivo.txt', 'r');
$conteudo = fread($handle, 100); // Lê os primeiros 100 bytes do arquivo
fclose($handle);
echo $conteudo;
```

#### Modos de Abertura de Arquivo

Ao usar a função `fopen()` para abrir um arquivo em PHP, você deve especificar um modo de abertura para indicar como o arquivo será manipulado. Existem diferentes modos de abertura, que determinam se o arquivo será aberto apenas para leitura, apenas para escrita, para leitura e escrita, e se o ponteiro de arquivo será posicionado no início, no final ou em outras posições do arquivo.

Alguns dos modos de abertura mais comuns são:

'r': Abre o arquivo somente para leitura. O ponteiro de arquivo é posicionado no início do arquivo (modo padrão).
'w': Abre o arquivo somente para escrita. **Se o arquivo já existir, seu conteúdo será apagado**. Se o arquivo não existir, ele será criado.
'a': Abre o arquivo para escrita, mas posiciona o ponteiro de arquivo no final do arquivo. Se o arquivo não existir, ele será criado.
'r+': Abre o arquivo para leitura e escrita. O ponteiro de arquivo é posicionado no início do arquivo.

Exemplo de uso de fopen() com diferentes modos:

```php
$handleRead = fopen('arquivo.txt', 'r');
$handleWrite = fopen('arquivo.txt', 'w');
$handleAppend = fopen('arquivo.txt', 'a');
$handleReadWrite = fopen('arquivo.txt', 'r+');
```

**Nota importante**: conforme mencionado anteriormente, abrir um arquivo em modo `w` irá apagar seu conteúdo caso o arquivo já exista. Portanto, tenha cuidado ao usar esse modo de abertura, já que ele pode implicar em perda de dados.

### Função `fclose()` e fechamento de arquivos

Após abrir um manipulador de arquivo em PHP, é importante fechá-lo para que o sistema operacional tenha o recurso liberado. Naturalmente todos os manipuladores de arquivos (e outros tipos de manipuladores do tipo *resource*) são liberados após a execução de um script PHP, mas problemas podem acontecer caso você precise lidar novamente com arquivos que foram previamente abertos no mesmo arquivo, como por exemplo se você quiser renomeá-lo. Por isso é sempre uma boa prática fechar os manipuladores que forem abertos.

### Função `file()`
A função `file()` é uma maneira conveniente de ler todo o conteúdo de um arquivo e armazená-lo em um array. Cada elemento do array representa uma linha do arquivo, incluindo os caracteres de quebra linha que existirem no final da linha:

```php
$linhas = file('arquivo.txt');
foreach ($linhas as $linha) {
    echo $linha;
}
```

### Função `unlink()`
A função `unlink()` é usada para excluir um arquivo em PHP. **Cuidado ao utilizar esta função, pois a exclusão é irreversível e não é possível recuperar o arquivo após a remoção**.

Exemplo de uso da função `unlink()`:

```php
if (file_exists('arquivo.txt')) {
    unlink('arquivo.txt');
    echo 'Arquivo excluído com sucesso.';
} else {
    echo 'O arquivo não existe.';
}
```

Outras funções e informações sobre manipulação de arquivos em PHP podem ser consultadas [na seção correspondente do manual do PHP](https://www.php.net/manual/en/ref.filesystem.php)

---

## Manipulação de Arquivos CSV em PHP

O formato CSV (Comma-Separated Values) é amplamente utilizado para armazenar dados tabulares, onde cada linha representa um registro e os valores são separados por vírgulas (ou outros delimitadores). Em PHP, existem funções específicas para lidar com arquivos CSV.

### Função `fgetcsv()`
A função `fgetcsv()` é usada para ler uma linha de um arquivo CSV e retorná-la como um array. Ela identifica automaticamente os campos separados por vírgulas e os coloca em elementos do array. Essa leitura funciona como a função `fread()`, movendo o ponteiro interno do arquivo para a próxima linha. Quando a função `fgetcsv()` é chamada no final do arquivo, ela retorna o valor booleano `false`.

```php
$handle = fopen('dados.csv', 'r');
while (($linha = fgetcsv($handle)) !== false) {
    print_r($linha);
}
fclose($handle);
```

### Função str_getcsv
A função `str_getcsv()` é semelhante à `fgetcsv()`, mas ela opera em uma string em vez de um arquivo. Ela analisa uma string CSV e retorna um array com os valores:

```php
$dados = 'João,25,"São Paulo"';
$linha = str_getcsv($dados);
print_r($linha); // Saída: Array ( [0] => João [1] => 25 [2] => São Paulo )
```

### Função `fputcsv()`

A função fputcsv é usada para escrever uma linha em um arquivo CSV. Ela recebe um array como entrada e escreve os valores separados por vírgulas no arquivo:

```php
$dados = array("João", 25, "São Paulo");
$handle = fopen('dados.csv', 'a');
fputcsv($handle, $dados);
fclose($handle);
```

---

## Manipulação de Strings em PHP

PHP possui uma variedade de funções para a manipulação de strings, permitindo que você realize tarefas como concatenação, busca, substituição, formatação, entre outras.

Exemplo de manipulação de strings:

```php
$texto = 'Olá, mundo!';
echo strlen($texto); // Saída: 12 (tamanho da string)
echo strtoupper($texto); // Saída: OLÁ, MUNDO! (conversão para maiúsculas)
echo str_replace('mundo', 'amigo', $texto); // Saída: Olá, amigo! (substituição de texto)
```

Outras funções para manipulação de strings podem ser vistas diretamente no [manual do php](https://www.php.net/manual/en/ref.strings.php)

---

## Includes e Requires

Em PHP, os includes e requires são utilizados para incluir o conteúdo de outros arquivos PHP no arquivo atual. Isso é útil quando você deseja reutilizar código de outros arquivos ou dividir o código em partes menores para facilitar a manutenção.

A diferença entre `include` e `require` é a forma como eles tratam erros. Se um arquivo não for encontrado no `include`, o PHP emitirá um aviso (warning) e continuará a execução do script. Já o `require` emitirá um erro fatal (fatal error) e interromperá a execução do script caso o arquivo não seja encontrado.

Exemplo de uso de `include`:

```php
// arquivo1.php
$mensagem = 'Olá, mundo!';

// arquivo2.php
include 'arquivo1.php';
echo $mensagem; // Saída: Olá, mundo!
```

Exemplo de uso de `require`:

```php
// arquivo1.php
$mensagem = 'Olá, mundo!';

// arquivo2.php
require 'arquivo1.php';
echo $mensagem; // Saída: Olá, mundo!
```

## Manipulação de Datas em PHP

PHP possui diversas funções para a manipulação de datas e horários, permitindo que você trabalhe com datas, faça cálculos, formate datas em diferentes formatos, entre outras operações.

Exemplo de manipulação de datas:

```php
$dataAtual = date('Y-m-d'); // Obtém a data atual no formato YYYY-MM-DD
echo $dataAtual;

$dataFormatada = date('d/m/Y', strtotime('2023-07-24')); // Converte uma data para o formato DD/MM/YYYY
echo $dataFormatada;
```

Mais informações sobre funções relacionadas a datas em PHP podem ser encontradas [no manual da linguagem](https://www.php.net/manual/en/ref.datetime.php).

---

Esses são apenas alguns dos tópicos fundamentais em PHP. Com esses recursos, você pode criar aplicações web dinâmicas, realizar operações com arquivos, manipular strings e trabalhar com datas de forma eficiente e flexível. O PHP é uma linguagem versátil e poderosa que pode ser aplicada em uma ampla variedade de cenários de desenvolvimento web. Com a prática e o aprendizado contínuo, você poderá aprimorar suas habilidades em PHP e desenvolver aplicações cada vez mais complexas e avançadas.