Como lidar com strings complicadas no PHP

Publicado por Cézar Augusto em 15/04/2020

[ Hits: 700 ]

Blog: https://cizordj.github.io

 


Como lidar com strings complicadas no PHP



Imagine que você é um programador PHP e precisa fazer uma consulta no banco de dados com um monte de variáveis, você começa a escrever a declaração SQL e percebe que a string é muito complicada.

Pois é, essa é uma situação que passei recentemente e percebi que o código fica muito bagunçado, se você não souber concatenar as strings de um jeito mais limpo. Para você entender o drama, dê uma olhada no código abaixo:

<?php
public function insert(Bill $bill, int $user_id) : bool
    {
        $link = $this->link;
        $billetBanking = $link->real_escape_string($bill->getBilletBanking());
        $sql = "INSERT INTO `bill` (`description`, `price`, `expirationDate`, `barCode`, `billetBanking`, `paid`) ".
                "VALUES ('".$bill->getDescription()."', '".$bill->getPrice()."', '".$bill->getExpirationDate()."', '".$bill->getBarCode()."', ".
                "'".$billetBanking."', CONV('0', 2, 10) + 0)";
        $link->query($sql);
        return $this->addRelation($user_id);
    }
?>

Eu quero você repare na variável "$sql", olhe quantas linhas, pontos, aspas duplas e simples, eu tive que adicionar para formar a variável final. É uma parte do código difícil de olhar, pois é um balaio de gato, até mesmo um espaço fora do lugar poderia parar o sistema todo e mostrar um erro.

Se eu imprimisse a variável, ela ficaria assim:

INSERT INTO `bill` (`description`, `price`, `expirationDate`, `barCode`, `billetBanking`, `paid`) VALUES ('Conta de luz', '220', '2020-05-04', NULL, 'um monte de dados binários aqui', CONV('0', 2, 10) + 0)

Nada demais, esse era o resultado que eu queria chegar, porém como dizia o Robert C. Martin em seu livro Clean Code, "nenhuma parte do código deve ser ignorada", então volta e meia eu teria que voltar nessa parte para fazer alguma manutenção.

Pois bem, o PHP processa todas as variáveis dentro de chaves {} em uma string, não é necessário fechar a string para adicionar o valor com um ponto.

Outra coisa que me ajudou, é que ao quebrar as linhas de uma string, o PHP não vai quebrar a linha no resultado final, para isso você tem que colocar "\n". Se não colocar "\n", o PHP vai ajuntar tudo em uma linha só.

Exemplo:

<?php
$msg = "
O
l
a

m
u
n
do";
echo $msg;
// Vai imprimir
// O l a m u n do
?>

No fim, a variável complicada ficou desse jeito aqui:

        $sql = "INSERT INTO `bill` (`description`, `price`, `expirationDate`,
            `barCode`, `billetBanking`, `paid`)
            VALUES ('{$bill->getDescription()}', '{$bill->getPrice()}',
            '{$bill->getExpirationDate()}', '{$bill->getBarCode()}', '{$billetBanking}',
            CONV('0', 2, 10) + 0)";

Versus versão anterior:

        $sql = "INSERT INTO `bill` (`description`, `price`, `expirationDate`, `barCode`, `billetBanking`, `paid`) ".
                "VALUES ('".$bill->getDescription()."', '".$bill->getPrice()."', '".$bill->getExpirationDate()."', '".$bill->getBarCode()."', ".
                "'".$billetBanking."', CONV('0', 2, 10) + 0)";

Com isso, eu evitei os problemas de concatenar strings com o ponto e todo aquele bolo de aspas duplas e simples.

Essa dica foi testada no PHP 7.3 no Debian Bullseye.

Over and out!

Outras dicas deste autor

Tema escuro no Elementary sem programas

Você deixa a porta aberta?

Alterar resolução de tela pelo Xorg

Partições BTRFS Nativamente no Windows

O Molotov está no ar!

Leitura recomendada

mysql_num_fields e mysql_field_name no PHP

Suporte PHP5 oci8 no Oracle 11g - Ubuntu 8.04 Server

Otimizando conexões entre PHP e MySQL

Mostrar as tabelas de um banco de dados no PostgreSQL usando PHP

Compilando o PHP4 com acesso ao banco Interbase / Firebird no Conectiva 9

  

Comentários
[1] Comentário enviado por fabio em 15/04/2020 - 22:58h

Boa! Tem nem comparação.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts