heredoc e nowdoc – tratamento de strings com PHP

heredoc e nowdoc

Exemplo de utilização do heredoc

Hoje despedimos da série de posts sobre tratamento de strings com PHP mostrando dois comandos que auxiliam bastante, principalmente na leitura do código programado. Estou falando do heredoc e do nowdoc. Estes dois comandos são formas de representação de strings, assim como os delimitadores de aspas simples e duplas, mais comumente utilizado.

Mas, por que utilizá-los ao invés das tão práticas aspas? Posso definir sua utilidade por 3 motivos:

  1. Praticidade
  2. Fácil leitura
  3. Fácil manutenção

O que é e como usar o heredoc

O heredoc permite você trabalhar com blocos de textos maiores sem se preocupar em escapar aspas duplas ou simples. Isto porque ele utiliza um demarcador “tagueado” identificando o começo e no final de cada string. Ele, assim como a aspas duplas, permite que você trabalhe com variáveis dentro da string. O heredoc irá interpretar a varíavel perfeitamente, sem concatenações e etc.

Para utilizá-lo você inicia o bloco de texto  com uma sequência de três sinais de menor e então identifique o bloco com um nome qualquer, <<<html, por exemplo. A partir daí tudo que você escrever será considerado como um string. Veja o exemplo abaixo:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title></title>
	<link rel="stylesheet" href="">
</head>
<body>

<?php
	$seu_nome = "Felipe Moraes";
	$endereco = "R. Josefina alves, 45, Maceió, AL.";
	
	//Este seria o código com aspas duplas
	$html = "<div id=\"ola\">
    	<p>Olá {$seu_nome},</p>
    	<p>Que tal visitar a gente em nossa sede: {$endereco}?</p>
  	</div>";
	
	echo "<h2>com aspas:</h2>".$html;
	
	//Este seria o código com heredoc
	$html = <<<HTML
  	<div id="ola">
	    <p>Olá {$seu_nome},</p>
    	<p>Que tal visitar a gente em nossa sede: {$endereco}?</p>
  	</div>
HTML;

	echo "<h2>com heredoc:</h2>".$html;

?>
	
</body>
</html>

Alguns detalhes que é preciso saber ao utilizar o heredoc é que caso necessite do carácter $ você precisará escapá-lo já que o heredoc identifica variáveis. Outra coisa é que para finalizar o bloco de texto você deve repetir o nome que identifica o heredoc na linha abaixo do texto. E você não deve ser indentar a linha de término para que tudo funcione perfeitamente.

Utilizei também algumas chaves para identificar as variáveis. Isto não é obrigatório, mas, auxilia na leitura do código e como este é um dos motivos de se utilizar o heredoc, vamos fazer direito.

E agora o nowdoc

O nowdoc tem utilização bem semelhante ao heredoc, porém, ele não consegue interpretar variáveis ou caracteres de controle. Este comando é compatível a partir do php 5.3. Para utilizá-lo segue a mesma lógica, com um pequeno detalhe, aqui o identificador inicial deve ter aspas simples, <<<‘HTML’. Veja o exemplo:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
</head>
<body>

<?php	
	//Este seria o código com aspas simples
	$html = '<div id=\'ola\'>
    	<p>Olá Felipe,</p>
    	<p>Que tal vir comer um queijo com a gente?</p>
  	</div>';
	
	echo "<h2>com aspas:</h2>".$html;
	
	//Este seria o código com nowdoc
	$html = <<<'HTML'
  	<div id="ola">
	    <p>Olá Felipe,</p>
    	<p>Que tal vir comer um queijo com a gente?</p>
  	</div>
HTML;

	echo "<h2>com heredoc:</h2>".$html;

?>
	
</body>
</html>

É possível utilizar o nowdoc para incluir um código PHP dentro do seu código php, assim você mantém a organização sem que nenhum código seja executado. Repare também que apesar do identificador inicial vir com aspas simples o final não necessita.

Concluindo, estas duas formas são muito amigáveis para trabalhar com blocos de textos grandes e que envolvem código e texto. Não que eles substituam as boas e velhas aspas simples e duplas, ainda utilizaremos elas muitas vezes para blocos pequenos e simples. Mas, sem dúvida nenhuma trabalhar com heredoc ou nowdoc torna a leitura e escrita de uma string de códigos extensa, muito mais simples.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

strstr e stristr, separando strings

strstr php

Exemplo de uso do strstr

Em um post anterior eu expliquei sobre o uso das funções explode e implode. Hoje tenho duas funções que podem ter utilização similar. Digo podem pois, sua função básica não tem nada haver com o explode, mas, seu retorno pode ser útil para separar uma determinada string, como separar o usuário de um e-mail por exemplo.

Estou falando da função strstr e stristr, estas duas funções procuram pela primeira ocorrência da string que você passar como parâmetro. Se ela encontrar qualquer ocorrência da string a função retornará a parte anterior a esta ocorrência.

strstr e stristr

As duas funções são bem semelhantes mas possuem uma única diferença, a strstr é case sensitive. Assim se a busca exige precisão entre maiúsculas e minusculas o uso da strstr é o mais recomendado. Mas vamos ao código.

$email = 'felipe_string_php@dialhost.com.br';

$find_it = '@';

$part_string_1 = strstr ( $email , $find_it , true );

echo '<b>buscando o usuário: </b>'.$part_string_1;

echo '<br>';

$part_string_2 = strstr ( $email , $find_it );

echo '<b>buscando o domínio: </b>'.$part_string_2;

echo '<br>';

$part_string_3 = substr($part_string_2, 1);

echo '<b> domínio sem o @: </b>'.$part_string_3;

Acima usei um exemplo simples que separa o  domínio do usuário. No caso defini na variável $email o e-mail que gostaria de tratar. Esta variável pode ser preenchida manualmente ou por um formulário (o que possivelmente será o mais natural.).

Depois defini o parâmetro da busca ‘@’ e assim fui usando o strstr com o parâmetro [before needle] como true (para pegar o valor anterior) ou false (para pegar o valor posterior). Por fim fiz uma complementação do código utilizando a função substr. Ela é responsável por quebrar uma palavra a partir de um determinado ponto, mas ela eu explico melhor em um outro artigo. Como resultado tive estes retornos.

Neste caso a utilização da stristr teria o mesmo resultado, já que se trata de um caractere especial. Mas, se sua busca envolver um caracter alfabético, ai sim ela poderá ter mais valia.

Ela também pode ser utilizada como forma de verificar a existência de uma palavra, letra ou termo dentro de um texto. E na verdade ela se trata de uma função bem simples para este tipo de verificação.

Espero que este comando tenha sido útil. No próximo mês continuo com esta série explicando mais alguns comandos para tratamento de strings.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

strtoupper, strtolower… Caracteres maiúsculos e minúsculos

strtoupper e mb_strtoupper - controle de caractere minúsculos e maiúsculos

Exemplo utilizandop strtoupper e mb_strtoupper

Para realizar o controle de caracteres maiúsculos e minúsculos o PHP disponibiliza diversas funções como: lcfirst, ucfirst, ucwords, strtolower, strtoupper e mb_strtoupper. Estas 5 funções realizam basicamente alteração de caracteres maiúsculas para minusculas e vice-versa. Por isto resolvi dar uma estudada nas mesmas e trazê-las em um pacote dentro deste post.

lcfirst

Comecemos pela função lcfirst, ela é útil quando queremos transformar apenas a primeira letra de uma string em minúscula. Por exemplo quando temos uma frase de algum artigo e queremos salvar isto com tudo em minúsculo. Não tem muito o que explicar dela, seu uso é bem simples, você passa a string e ela te retorna com o primeiro caractere em minúsculo. Seu uso é assim:

lcfirst ($string );

ucfirst

Ao contrário da lcfirst, a função ucfirst transforma a primeira letra de uma string em maiúscula, então se você quiser pegar aquela frase toda em minúscula e capitalizar o primeiro caractere, esta é a função. Seu uso é exatamente igual a lcfirst.

ucfirst ($string );

ucwords

A função ucwords foi um pouquinho além, e transforma o primeiro caractere de cada palavra para maiúsculo. O uso continua o mesmo:

ucwords ($string );

strtolower

No caso de conversão de caracteres a strtolower, assim como a strtoupper, são mais comuns. A strtolower transforma qualquer caractere maiúsculo da string passada para minúsculo. A forma de usar ainda continua a mesma:

strtolower ($string );

A strtolower pode ser utilizada para padronizar nomes de arquivos em uploads ou caminhos. Em URLs, caracteres 100% em minúsculos  são mais amigáveis para a digitação do usuário. Isto porque apesar de domínios não serem case sensitive as URLs são.

Como não é usual digitarmos nada usando letras maiúsculas nas URLs, manter caracteres sempre em minúsculo garante que o usuário tem um conteúdo único.

strtoupper e mb_strtoupper

A strtoupper é o oposto da strtolower, sendo assim, ela se responsabiliza por transformar toda a string em maiúsculo. Vale lembrar que a strtoupper pode não trazer resultados corretos quando utilizada em strings com acento. Infelizmente a função não identifica letras acentuadas como caractere alfabético válido, por isto utilize a função mb_strtoupper nestes caso. Para não me alongar muito vou mostrar a utilização de ambas abaixo:

strtolower ($string );
mb_strtolower ($string,"utf-8" );

Como podem ver a única diferença entre uma e outra é que na mb_strtolower a gente define também o charset que desejamos e assim a função consegue identificar os caracteres como alfabéticos.

Por serem funções usuais, mas com aplicações simples e variadas, não consegui achar ou pensar em um exemplo único para a utilização destes comandos, mas convido a todos postarem nos comentários sobre usos interessantes destas funções. Abs e aguardem no próximo artigo falarei sobre strstr e stristr.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

Implode – Tratamento de strings com PHP

Implode para query

Imagem Ilustrativa

Mês passado, quando expliquei um pouco sobre a função explode(), fiquei de explicar a função reversa deste comando. A função em questão é a implode, ela também é bastante utilizada, no caso agora, para juntar um array em uma simples string. Abaixo deixarei um pouco sobre o que estudei estes dias sobre o implode com um exemplo prático.

O básico da função  implode ()

Como dito no começo, o implode foi criado como uma função reversa ao explode(). Sendo assim, ele faz a junção dos itens de um array em uma string simples. Para a utilização da função você pode passar dois parâmetros sendo que o primeiro se tornou opcional a partir da versão 4.3 do PHP.

implode([string $separador] , array $palavras).

No código acima temos a passagem dos 2 parâmetros necessários para o funcionamento da função. O primeiro $separador será um caractere que fará a separação das strings no array dentro desta nova string formada. Apesar de não ser mais necessário  a utilização deste parâmetro, usá-lo e a forma mais comum para os diversos tratamentos utilizados hoje.

O segundo parâmetro é o array de palavras ou itens que você deseja colocar na string final. Por fim, aqui não temos um limitador igual na função explode, isto porque o limitador é o próprio array.

Dando um implode em seus arrays

Vamos à parte prática da função implode. Ela pode ser muito útil para fazer queries no MySQL utilizando a cláusula IN. Vamos dizer que tenhamos uma tabela de clientes e seus pratos preferidos. Você então deseja selecionar aqueles clientes que gostam de batatas fritas, bife de boi e arroz. Você poderia fazer uma query cheia de cláusulas OR, mas acredito que desta forma seria bem mais prático.

Tabela de clientes

+------+---------+---------------------+
| id   | nome    | prato_preferido     |
+------+---------+---------------------+
| 1    | John    | batatas fritas      |
| 2    | Ram     | bife de boi         |
| 3    | Jack    | arroz               |
| 4    | Jill    | torresmo            |
+------+---------+--------------------+


Tendo esta tabela em vista vamos ao código. No código abaixo fiz um simples array com os pratos que desejo, implodi o mesmo utilizando o separador ‘,’ e então fiz a query vejam só:

<?php

		//Definindo os itens da busca no array
		$arr = array('batata frita','bife de boi','arroz');

		//Fazendo o implode dos itens em uma string simples
		$query_args = implode("','",$arr);

		//definindos os dados de conexão com o banco via PDO
		$user = 'local';
		$pass = 'local';
		$dbh = new PDO('mysql:host=localhost;dbname=devel2_implode', $user, $pass);

		//Montando a query da busca filtrada
		$query = "select * from clientes where prato_preferido IN ('".$query_args."')";
		
		//Executando a query com PDO
		$resultado = $dbh->query($query);
		$resultado = $resultado->fetchAll();
		
		//Trazendo os resultados da busca
		foreach ( $resultado as $row){
			echo "<p style=\"font-weight:bold;\">".$row["nome"]."</p>";
		}			
	?>

Para a conexão com o banco utilizei o PDO do PHP, por questões de melhor segurança dos dados e etc. caso prefira pode utilizar o mysql_query ou mysqli_query. Fica a seu critério.

Como explicado acima, eu defini os filtros da minha busca dentro do array. No caso você pode popular este array através de um formulário ou de um relatório. Implodi ele para que o mesmo venha como uma string só e assim permitir a utilização dos filtros no IN do MySQL. Por fim é só fazer a busca em seu banco e imprimir os resultados. Simples neh? Confiram o resultado final e com alguns ajustes neste link.

Concluindo, o implode consegue transformar as strings dentro de um array reunindo-as em uma string simples e assim várias possibilidades surgem para tratamento posterior. Espero que esta dica tenha sido de boa ajuda. Até o próximo post, Abs.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais ou veja nossos produtos.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.

Função explode – Tratamento de strings com PHP

Código de exemplo da função explode

Código de exemplo da função explode

No último post falei sobre Addslashes e a evolução do tratamento de dados para SQL. Desta vez mudo um pouco os caminhos e vou falar sobre a função explode. Ela é relativamente comum ao tratamento de strings, por isso, resolvi relembrar um pouco sobre a sua utilização. Então para este post irei abordar um pouco sobre a função e um exemplo em que sua aplicação pode ser bem útil.

O básico da função explode()

O explode() foi criado com a intenção de separar uma string em um array de várias strings menores. Para isto ele utiliza determinados caracteres, passados por parâmetros, para fazer a separação. Sua estrutura fica assim:

explode(string $delimitador , string $string [, int $limite ]).

Analisando o código abaixo, temos os parâmetros $delimitador que será o caractere de divisão da string. Em seguida teremos a própria string que será desmembrada e por último, e de forma opcional, a quantidade de strings partidas serão salvas no array. Vale lembrar que ao limitar o explode a última string terá o restante da frase.

Explodindo em Tags

Um dos exemplos mais práticos que descobri sobre a utilização do explode() é criação de tags e categorias personalizadas. Esta utilização é bem comum em sistemas como WordPress ou outros gerenciadores de conteúdo. Pegando o exemplo do WordPress, em seu administrador, temos um campo de tags onde você pode definir tags aos posts separando as palavras chaves por vírgula.

Mas vamos para prática e mostrar um exemplo prático disto. O exemplo abaixo eu fiz uma leitura simples do campo tag do formulário e reimprimi na tela. Claro que o ideal é utilizar o comando e depois gravar em um banco de dados ou dar continuidade ao tratamento de acordo com a sua necessidade.

<div class="container">
			
		<h1> Teste com a função explode</h1>
		<form action="explode.php" method="POST">
			<div>
			<label for="tag">Digite as tags:</label><br>
			<input type="text" id="tag" name="tag" placeholder="Tag">
			<p>Digite separando com espaço</p>
			</div>
			<input class="bt" type="submit" value="GERAR TAGS">
		</form>
	<div>
		<?php
	if($_POST){
		$tags = explode(" ",$_POST[tag]);
		$i = 1;
		foreach ($tags as $key => $value) {
			if($i % 2== 1)
			echo "<p class=\"grey\">Tag ".$i.": ".$value."</p>";
		else
			echo "<p>Tag ".$i.": ".$value."</p>";
			$i++;
		}
	}
?>
	</div>
	</div>

No exemplo ácima, fiz um formulário simples para que pudessem ser cadastradas as tags, com separação por espaço. Após enviado o formulário, o mesmo recarregará a página explodindo a string pelos espaços e imprimindo cada palavra em um parágrafo. Como este é apenas um exemplo de demonstração não me apeguei em salvar os dados ou qualquer coisa do tipo. Mas, o ideal é que estes dados sejam tratados e ou salvos em banco de dados como categorias, ou simplesmente tags. Para ver o exemplo em ação clique aqui.

Para realizar o processo inverso do explode é possível utilizar a função implode. Esta explico no próximo post desta série.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais.

 

Felipe Moraes
Felipe Moraes

Gerente de desenvolvimento na DialHost, Designer Gráfico formado pela Universidade FUMEC, Minas Gerais e Pós graduando em Branding pelo Centro Universitário UNA, possuo interesse em design de interação e interfaces. Trabalha com programação e criação para web, desde 2006. Apreciador de Bacon, Pudim e music Tag.