Como lidar com strings complicadas no PHP

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

[ Hits: 1.166 ]

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

Como verificar senha no shell script

Partições BTRFS Nativamente no Windows

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

Cuidado com nomes de arquivos no Linux

Como montar arquivos .img do Android

Leitura recomendada

Enviando parâmetros para o Google e gravando o resultado em banco

Múltiplos portais em Xoops com o mesmo DB

Configurando o phpMyAdmin para acessar o MySQL remotamente

Descobrir a senha do PHPMyAdmin

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts