Scriptcaser
Utilização do função sprintf do php com scriptcase

A função sprintf e por quê você deveria usar no scriptcase

Olá scriptcasers, a sprintf é um coringa dentro do scriptcase. Sim, você deveria começar a usá-la e vou explicar o por que.

No scriptcase temos três tipos de variáveis: variável de campo scriptcase {variavel}; váriavel global [variavel]; e a variável de escopo local $variavel.

Muitas vezes quando queremos executar um sc_lookup ou um sc_exec_sql, para passar valores dinâmicos temos que escrever o código da maneira que considero a mais chata de todas, concatenar string com variável utilizando o ponto. Vejamos um exemplo:

$sql = "SELECT name, email FROM sec_users WHERE login = '".$login."' AND password = '".$password."'";
sc_lookup($sql);

É certo que esse código funcionará, mas visualmente é ruim. Possivelmente você trabalha em equipe e o mesmo código é visto por todos os membros associados ao projeto, e, nesse caso, quando você tem queries sql muito grandes, esse tipo de marcação torna o código difícil de ser lido e levará mais tempo para depurar caso haja algum bug.

Para resolver isso poderíamos utilizar template string, vejamos no exemplo abaixo:

$sql = "SELECT name, email FROM sec_users WHERE login = '{$login}' AND password = '{$password}'";
sc_lookup($sql);

O que acontece nesse caso é que, mesmo dentro das aspas, as variáveis serão impressas e a consulta será realizada com sucesso. Mas isso funciona no scriptcase? A resposta é não.

Como falei anteriormente, o scriptcase tem três tipos de variáveis. Esse padrão de variável com chaves {variavel} será lido pelo scriptcase e se você abrir no código fonte verá que quando você chama a variável de campo {variavel} dentro de algum evento, na compilação ela será interpreada como $this->variavel. Sendo assim, se eu uso uma variável de escopo local dentro de chaves, o scriptcase irá imprimir a $variavel como $$variavel ou $this->variavel e possivelmente acontecerá um crash.

A função sprintf

A função sprintf basicamente escreve valores de variáveis de uma string formatada. Utilizando o mesmo sql anterior como base, reescreveremos o query.

$sql = sprintf("SELECT name, email FROM sec_users WHERE login = '%s' AND password = '%s'", $login, $password);
sc_lookup($sql);

Veja que elegante! Fácil de ler e dar manutenção. No exemplo acima utilizei a tag de marcação %s, informando que o valor que será passado é do tipo string; caso quisesse, por exemplo, passar um valor do tipo inteiro, utilizaria a tag %d. Segue abaixo as marcações que podem ser utilizadas junto com o sprintf:

  • % – Um caractere porcento. Não é requerido nenhum argumento.
  • b – O argumento é tratado com um inteiro, e mostrado como um binário.
  • c – O argumento é tratado como um inteiro, e mostrado como o caractere ASCII correspondente.
  • d – O argumento é tratado como um inteiro, e mostrado como um número decimal com sinal.
  • e – o argumento é tratado como notação científica (e.g. 1.2e+2). O especificador de precisão indica o número de dígitos depois do ponto decimal desde o PHP 5.2.1. Em versões anteriores, ele pegava o número de dígitos significantes (ou menos).
  • u – O argumento é tratado com um inteiro, e mostrado como um número decimal sem sinal.
  • f – O argumento é tratado como um float, e mostrado como um número de ponto flutuante (do locale).
  • F – o argumento é tratado como um float, e mostrado como um número de ponto flutuante (não usado o locale). Disponível desde o PHP 4.3.10 e PHP 5.0.3.
  • o – O argumento é tratado com um inteiro, e mostrado como un número octal.
  • s – O argumento é tratado e mostrado como uma string.
  • x – O argumento é tratado como um inteiro, e mostrado como um número hexadecimal (com as letras minúsculas).
  • X – O argumento é tratado como um inteiro, e mostrado como um número hexadecimal (com as letras maiúsculas).

O sprintf também é muito útil quando você trabalha com múltiplos idiomas. Escrevendo a string utilizando as tags aceitas pelo sprintf você poderá mesclar conteúdos das suas variáveis as suas mensagens cadastradas na biblioteca.

Simplifique o seu código, deixe-o mais elegante. Eu garanto que quando você precisar revisitá-lo, terá menos trabalho de ler e consequentemente dar manutenção.

scriptcaser

2 comments

Newsletter

Se inscreva na nossa newsletter
Se increva hoje na nossa lista de e-mail para receber atualizações, tutoriais e ofertas especiais!

Respeitarei sua privacidade. Seu e-mail nunca será compartilhado.