Como lidar com strings complicadas no PHP

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

[ Hits: 1.173 ]

Blog: https://www.cezarcampos.com.br/

 


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

Alterar resolução de tela pelo Xorg

Como verificar senha no shell script

Problemas para instalar WoeUSB no Debian, Ubuntu e derivados [Resolvido]

Você deixa a porta aberta?

Navegadores WebKit VS Placas NVidia

Leitura recomendada

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

PHP com suporte a PostgreSQL

PHP - Biblioteca PDO

Otimizando conexões entre PHP e MySQL

Portal TechRoot

  

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts