Usando a função sprintf()
A função sprintf, é uma das melhores formas de se aglutinar resultados html e php em uma única linha. Quantas vezes nos enrolamos na utilização de \” para printar aspas duplas que necessitamos em nossa saída html. Uma ótima opção que permite que sejam separadas, de forma organizada, o html de saídas php.
Usando “ASPAS DUPLAS” e ‘ASPAS SIMPLES’
Existe em requisito básico para a utilização desta função. Se você já é experiente no uso de aspas simples e duplas, pule direto para a próxima página. Entretanto, se muitas vezes você fica enrrolado entre qual delas utilizar, leia esta parte pois, caso contrário, poderá ficar perdido no meio da compreenção de sua sintáxe.
A diferença entre a utilização de aspas simples e duplas, está na forma em que o php interpretará o conteúdo do literal que esta sendo impresso (na tela, é claro). A utilização de aspas duplas, implica que o literal que está sendo impresso, poderá ter conteúdo mixto, ou seja, aglutinação de um literal e uma variável, uma operação, interpretação de caracteres especiais, entre outros. O exemplo clássico deste tipo é uma saída onde dizemos o nome de um usuário: Queremos que nossa saída fique assim:
Normalmente, utilizariamos o código:
Podemos utilizar das aspas duplas para simplificar nosso trabalho. O código ficaria:
Note que, a variável $nome ficou incluída no meio da literal a ser impressa, sem a necessidade de utilizar um concatenador de literal (ponto) para unir as duas saídas. Vejamos um exemplo maior que aumentaria nossa necessidade de atenção na escrita do código. Queremos que seja impresso:
Na primeira forma, teriamos de escrever:
Simplificando, teríamos:
A inclusão das variáveis no meio do literal a ser impresso fica bem mais simples e fácil de usar.
Muitas vezes, somos forçados a utilizar caracteres que não podem ser impressos por aspas duplas. Um caso especial é o uso de aspas duplas. Vejamos a saída:
Para imprimir isso na tela, não poderiamos utilizar a regra acima pois este código:
Gerará o erro:
Teremos que apelar para uma das alternativas:
1 – Uso de backslash:
O Backslash (\), faz com que o próximo caracter seja interpletado como literal, ignorando sua funcionalidade no php. Neste caso, \" imprimirá " na tela.
2 – Uso de aspas simples e concatenadores de literal:
NOTE: Se você tentar aglutinar a variável dentro das aspas simples como:
Terá como saída:
Usando “ASPAS DUPLAS” e ‘ASPAS SIMPLES’
Existe em requisito básico para a utilização desta função. Se você já é experiente no uso de aspas simples e duplas, pule direto para a próxima página. Entretanto, se muitas vezes você fica enrrolado entre qual delas utilizar, leia esta parte pois, caso contrário, poderá ficar perdido no meio da compreenção de sua sintáxe.
A diferença entre a utilização de aspas simples e duplas, está na forma em que o php interpretará o conteúdo do literal que esta sendo impresso (na tela, é claro). A utilização de aspas duplas, implica que o literal que está sendo impresso, poderá ter conteúdo mixto, ou seja, aglutinação de um literal e uma variável, uma operação, interpretação de caracteres especiais, entre outros. O exemplo clássico deste tipo é uma saída onde dizemos o nome de um usuário: Queremos que nossa saída fique assim:
NOME: Jayr Porto
Normalmente, utilizariamos o código:
<? echo "NOME: ".$nome; ?>
Podemos utilizar das aspas duplas para simplificar nosso trabalho. O código ficaria:
<? echo "NOME: $nome"; ?>
Note que, a variável $nome ficou incluída no meio da literal a ser impressa, sem a necessidade de utilizar um concatenador de literal (ponto) para unir as duas saídas. Vejamos um exemplo maior que aumentaria nossa necessidade de atenção na escrita do código. Queremos que seja impresso:
Olá, Jayr Porto. Hoje é dia 10/03/2003, Segunda-feira. Bem vindo!
Na primeira forma, teriamos de escrever:
<? echo "Olá, ".$nome.".<br>Hoje é dia ".$data.", ".$dia.".<br>Bem vindo!"; ?>
Simplificando, teríamos:
<? echo "Olá, $nome.<br>Hoje é dia $data, $dia.<br>Bem vindo!"; ?>
A inclusão das variáveis no meio do literal a ser impresso fica bem mais simples e fácil de usar.
Muitas vezes, somos forçados a utilizar caracteres que não podem ser impressos por aspas duplas. Um caso especial é o uso de aspas duplas. Vejamos a saída:
Olá, “Jayr Porto”.
Para imprimir isso na tela, não poderiamos utilizar a regra acima pois este código:
<? echo "NOME: "$nome"."; ?>
Gerará o erro:
Parse error: parse error, unexpected T_VARIABLE, expecting ',' or ';' in /home/folheteria/teste.php on line 2
Teremos que apelar para uma das alternativas:
1 – Uso de backslash:
<? echo "NOME: \"$nome\"."; ?>
O Backslash (\), faz com que o próximo caracter seja interpletado como literal, ignorando sua funcionalidade no php. Neste caso, \" imprimirá " na tela.
2 – Uso de aspas simples e concatenadores de literal:
<? echo 'NOME: "'.$nome.'".'; ?>
NOTE: Se você tentar aglutinar a variável dentro das aspas simples como:
<? echo 'NOME: "$nome".'; ?>
Terá como saída:
NOME: "$nome"
Existe uma forma fácil de formatar os números e valores para o Brasil usando sprintf:
A função sprintf ou printf utiliza as informações da localidade atual. Isto pode, e vai, variar de um OS para outro.
Utilize antes das funções sprintf ou em um local genérico o seguinte :
setlocale(LC_ALL,'pt_BR');
O ideal é consultar a documentação de setlocale para mais detalhes.
Veja o resultado
em um exemplo simples:
<?php
$number = 192.65;
echo setlocale(LC_ALL,'pt_BR');
echo sprintf("%01.2f",$number);
?>
Produzirá a saída :
192,65
Usando isto vc pode estender para colocar a literal R$ antes e etc...
Espero ter ajudado !
Alexandre
A função sprintf ou printf utiliza as informações da localidade atual. Isto pode, e vai, variar de um OS para outro.
Utilize antes das funções sprintf ou em um local genérico o seguinte :
setlocale(LC_ALL,'pt_BR');
O ideal é consultar a documentação de setlocale para mais detalhes.
Veja o resultado
em um exemplo simples:
<?php
$number = 192.65;
echo setlocale(LC_ALL,'pt_BR');
echo sprintf("%01.2f",$number);
?>
Produzirá a saída :
192,65
Usando isto vc pode estender para colocar a literal R$ antes e etc...
Espero ter ajudado !
Alexandre
15/12/2005 5:04am
(~19 anos atrás)
Valeu, gostei muito da sua dica, ja fiquei muitas vezes doido na hora de imprimir muita informação, acho que agora terei menos problemas.
28/11/2005 4:59am
(~19 anos atrás)
É bom lembrar que é interessante usar stripslashes ao invés de escapar com barras invertidas... principalmente ao retornar de um banco de dados onde as vezes não sabemos que resultado virá.
ex: $nome = stripslashes($nome)
ex: $nome = stripslashes($nome)
09/01/2004 12:05pm
(~21 anos atrás)
Na realidade, sprintf() e printf() são a mesma função em php. Eu utilizei o Sprint no título e no preâmbulo do artigo pois é a função onde esta a descrição do uso no manual do PHP.
Mesmo no manual, você poderá verificar que a descrição da função se encontra no tópico sprintf. Se você acessar o printf, ele diz que a explicação esta na outra função. Para simplificar o entendimento de alguém que por ventura quisesse verificar no manual, tentei ser coerente.
Mesmo no manual, você poderá verificar que a descrição da função se encontra no tópico sprintf. Se você acessar o printf, ele diz que a explicação esta na outra função. Para simplificar o entendimento de alguém que por ventura quisesse verificar no manual, tentei ser coerente.
26/12/2003 5:47am
(~21 anos atrás)
Primeiro quero falar que ta bem legal o artigo... e eh bem interessante o uso dessa funcao.
Mas nao entendi se vc queria falar sobre sprintf ou printf, acho que provavelmente errou no titulo, ja que usou printf() no artigo
Mas nao entendi se vc queria falar sobre sprintf ou printf, acho que provavelmente errou no titulo, ja que usou printf() no artigo
21/12/2003 7:25pm
(~21 anos atrás)
Eu li o seu artigo e o achei muito interessante mas não estou conesguindo formatar o valor de mil e milhar, ou seja:
$v1 = 1,234
$v2 = 134,358
sprintf('%0.2f',$v1) = 1.24
sprintf('%0.2f',$v2) = 134.36
Até aí tudo bem, mas se eu tiver valores acima de 1000, como por exemplo
$v3 = 1234,44343
sprintf('%0.2f',$v3) = 1234.44
E eu queria que ficasse assim:
sprintf('%0.2f',$v3) = 1 234.44
Mas não fica... sabe como resolver este problema?