<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Felipe Tonello &#187; Tutoriais</title>
	<atom:link href="http://felipetonello.com/blog/category/tutoriais/feed/" rel="self" type="application/rss+xml" />
	<link>http://felipetonello.com/blog</link>
	<description>Compartilhe, ajude e cresça</description>
	<lastBuildDate>Thu, 29 Jul 2010 20:35:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Engatinhando com AJAX e PHP. Parte 3</title>
		<link>http://felipetonello.com/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/</link>
		<comments>http://felipetonello.com/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 06:42:39 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/</guid>
		<description><![CDATA[Depois de um bom tempo estou aqui novamente! Eu recomendo todos que não viram as partes um e dois do tutorial, que as veja. Engatinhando com AJAX e PHP. Parte 1 Engatinhando com AJAX e PHP. Parte 2 Nessa 3ª parte, vamos ver como usar Requisição POST. Vamos para o que interessa! Criando nosso formulário [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de um bom tempo estou aqui novamente!</p>
<p>Eu <strong>recomendo</strong> todos que não viram as partes <a href="/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/" title="Engatinhando com AJAX e PHP. Parte 1">um</a> e <a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/" title="Engatinhando com AJAX e PHP. Parte 2">dois</a> do tutorial, que as veja.<br />
<a href="/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/">Engatinhando com AJAX e PHP. Parte 1</a><br />
<a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/">Engatinhando com AJAX e PHP. Parte 2</a></p>
<p>Nessa 3ª parte, vamos ver como usar <strong>Requisição POST</strong>.</p>
<p>Vamos para o que interessa!<br />
<!--adsense--></p>
<blockquote><p>Criando nosso formulário</p></blockquote>
<p>Vamos criar um formulário normal.<br />
<strong>index.htm</strong></p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;../Ajax.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;postAjax.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;postAjax.php&quot;</span> <span style="color: #000066;">onsubmit</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;enviaReq(); return false&quot;</span>&gt;</span>
&nbsp;
Entre com suas informações
&nbsp;
Seu nome:
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;nome&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
	Sua Cidade:
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;cidade&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;OKA!&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div>

<p>Aqui estamos linkando nossa biblioteca para criar nosso objeto XMLHttp. Caso você não esteja entendendo essa parte, recomendo você ler os <a href="/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/" title="Engatinhando com AJAX e PHP. Parte 1">dois</a> <a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/" title="Engatinhando com AJAX e PHP. Parte 2">primeiros</a> artigos.</p>
<p>A unica coisa que é novidade, é o onSubmit alí. Quer dizer que quando o formulário for submetido, vai ser rodado uma função javascript ao invez de enviar diretamente o formulário. Depois é dado um <strong>return false</strong> para ter certeza que a página não dê refresh.</p>
<blockquote><p>Requisição POST</p></blockquote>
<p>A requisição post precisa ser enviada no formato, pelo cabeçalho http:<br />
<code>nome1=valor1&amp;nome2=valor2&amp;...&amp;nomeN=valorN</code></p>
<p>para isso vamos criar a função que gere esse formato para nós.<br />
Vamos chama-la de <strong>criaReqStr()</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> criaReqStr<span style="color: #009900;">&#40;</span>oForm<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> aPostStr <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> oForm.<span style="color: #660066;">elements</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> sValor <span style="color: #339933;">=</span> encodeURIComponent<span style="color: #009900;">&#40;</span>oForm.<span style="color: #660066;">elements</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		sValor <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot;=&quot;</span><span style="color: #339933;">;</span>
		sValor <span style="color: #339933;">+=</span> encodeURIComponent<span style="color: #009900;">&#40;</span>oForm.<span style="color: #660066;">elements</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		aPostStr.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>sValor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">return</span> aPostStr.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&amp;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Essa função está assumindo que lhe será informada o objeto do formulário, como argumento. Um array(<em>aPostStr</em>) é criado para guardar cada par de nome-valor. Depois, conforme o numero de elementos do formulário, é concatenado o par nome-valor à variável <em>aPostStr</em>. No final do loop, é retornado a informação dos pares nome-valor corretamente.</p>
<p><em>Você pode se perguntar: Porque usar esse join() no final sendo que eu posso concatenar tudo direto?</em><br />
Realmente, seria o mais lógico. Mas cada concatenação, em web-browsers, é muito pesada para o processo, então quanto menos você concatenar melhor.</p>
<blockquote><p>Fazendo a requisição</p></blockquote>
<p>Para isso, vamos criar a função <strong>enviaReq()</strong>, que é bem parecida com a função para a <a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/" title="Engatinhando com AJAX e PHP. Parte 2">requisição GET</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> enviaReq<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> oForm <span style="color: #339933;">=</span> document.<span style="color: #660066;">forms</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> sBody <span style="color: #339933;">=</span> criaReqStr<span style="color: #009900;">&#40;</span>oForm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> oXMLHttp <span style="color: #339933;">=</span> criaXMLHttp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	oXMLHttp.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;post&quot;</span><span style="color: #339933;">,</span> oForm.<span style="color: #660066;">action</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	oXMLHttp.<span style="color: #660066;">setRequestHeader</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Content-Type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;application/x-www-form-urlencoded&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	oXMLHttp.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>oXMLHttp.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span>
			exibeResult<span style="color: #009900;">&#40;</span>oXMLHttp.<span style="color: #660066;">responseText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">else</span>
			exibeResult<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Ocorreu um erro: &quot;</span> <span style="color: #339933;">+</span> oXMLHttp.<span style="color: #660066;">statusText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	oXMLHttp.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span>sBody<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Primeiramente ela seta a referencia do form numa variável(<em>oForm</em>). Depois recebe a string dos pares nome-valor pela função criaReqStr(), lembram?<br />
Em seguida é instanciado o objeto xmlhttp pela função <a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/" title="Engatinhando com AJAX e PHP. Parte 2">criaXMLHttp()</a>.<br />
Depois que está o &#8220;tchan&#8221; do negócio, no método open() o primeiro parâmetro é &#8220;post&#8221;, qual requisição queremos fazer. O segundo parâmetro é a página que iremos enviar a requisição, que no caso é o atributo <em>action</em> do formulário. O terceiro parâmetro é true em caso de querer que a requisição seja assíncrona.<br />
Depois é setado um cabeçalho de que a informação está codificada(<em>urlencode</em>). Importante, porque a maioria das linguagens server-side verifica essa codificação para o parsing da informação</p>
<p>Depois é só exibir o resultado no nosso <strong>div#divStatus</strong> pela função exibeResult():</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> exibeResult<span style="color: #009900;">&#40;</span>sTxt<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> divStatus <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;divStatus&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	divStatus.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> sTxt<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Simples não?</p>
<p>Agora vamos para a parte mais fácil: O server-side.</p>
<blockquote><p>Criando nosso arquivo PHP</p></blockquote>
<p>Ele é super simples, muito igual ao no caso da requisição feita pelo método GET.<br />
<strong>postAjax.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: text/plain'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$sNome</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nome'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sCidade</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cidade'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$sStatus</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Exemplo com Banco de Dados MySQL */</span>
<span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'seu.servidor'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usuario'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'senha'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tabela.do.bd'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO tabela VALUES ('<span style="color: #006699; font-weight: bold;">$sNome</span>', '<span style="color: #006699; font-weight: bold;">$sCidade</span>')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000088;">$sStatus</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Informação inserida corretamente do banco de dados.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
	<span style="color: #000088;">$sStatus</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Erro ao inserir informações no banco de dados'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$sStatus</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Você percebeu que mudamos o cabeçalho do arquivo para texto normal, usando a função header(). Depois só recebemos as variáveis pelo array global <em>$_POST[]</em>.<br />
Inserimos no banco de dados, e em caso de sucesso exibe a mensagem de sucesso. Em caso de erro(banco de dados com problema), exibe a mensagem de erro.</p>
<blockquote><p>Baixando o tutorial</p></blockquote>
<p>Para maior proveito do tutorial, baixe o tutorial agora:<br />
<a href="/Sistemas/Upload/arquivo.php?i=10" title="post-ajax-php.zip">post-ajax-php.zip</a><br />
<a href="/Sistemas/Upload/arquivo.php?i=11" title="post-ajax-php.tar.gz">post-ajax-php.tar.gz</a></p>
<p>Nessa parte 3 fui bem mais direto ao ponto, agora que todo mundo já sabe o básico de AJAX com  PHP né? hehehe</p>
<p>Mas é isso aí. Nas próximas versões do tutorial, vamos ver como fazer um validador de formulário conversando com banco de dados.</p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Zend Framework para um PHP mais poderoso</title>
		<link>http://felipetonello.com/blog/2007/02/28/zend-framework-para-um-php-mais-poderoso/</link>
		<comments>http://felipetonello.com/blog/2007/02/28/zend-framework-para-um-php-mais-poderoso/#comments</comments>
		<pubDate>Wed, 28 Feb 2007 18:23:52 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2007/02/28/zend-framework-para-um-php-mais-poderoso/</guid>
		<description><![CDATA[Esse tutorial tem como objetivo mostrar para as pessoas que nunca viram nada sobre o ZF(Zend Framework) e estão querendo saber como ele funciona. Quem já ouviu falar do Zend Framework? Resumidamente a Zend é uma empresa responsável pela manutenção e desenvolvimento do PHP. A engine de orientação a objetos do php5 foi totalmente reescrita [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Esse tutorial tem como objetivo mostrar para as pessoas que nunca viram nada sobre o ZF(<a href="http://zend.framework.com/">Zend Framework</a>) e estão querendo saber como ele funciona.</strong></p>
<p>Quem já ouviu falar do <a href="http://zend.framework.com/">Zend Framework</a>? Resumidamente a <a href="http://www.zend.com" title="Zend the PHP company">Zend</a> é uma empresa responsável pela manutenção e desenvolvimento do PHP.<br />
A engine de <a href="/blog/2006/05/15/php-entendendo-o-php5/" title="Entendendo o PHP5">orientação a objetos do php5</a> foi totalmente reescrita pelo pessoal da Zend.</p>
<blockquote><p>Mas o que seria um framework?</p></blockquote>
<p>O framework é um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software. (Wikipedia)<br />
Pode-se dizer que ele seria um conjunto de bibliotecas específicas.</p>
<p>Falando nossa lingua, o framework é um conjuntão de bibliotecas que ajuda em nosso trabalho do dia a dia, e nos trabalhos mais complicados também.</p>
<p>Esse artigo utiliza a versão <strike>0.8 do framework. (dia 28/02/07)</strike><br />
<em>[atualizado]</em><br />
Versão atual: 1.0.2 (01/09/07)<br />
<em>[/atualizado]</em></p>
<blockquote><p>Entendendo o Zend Framework</p></blockquote>
<p>O Zend Framework segue o padrão MVC &#8211; Model View Controller. É um padrão de arquitetura onde separa o <acronym title="Graphical User Interface">GUI</acronym>, templates, etc(View) da lógica(Model) e do controle(Controller).<br />
Então nele você pode usar a mesma lógica e/ou controle em diversas interfaçes com o usuário.</p>
<blockquote><p>Usando o Zend Framework</p></blockquote>
<ul>
<li>Faça download dele no site oficial: <a href="http://framework.zend.com/download">http://framework.zend.com/download</a></li>
<li>Descompacte o arquivo em qualquer pasta. Exemplo: tar zxvf ZendFramework-1.0.2.tar.gz -C ~/</li>
</ul>
<p>Agora vamos arrumar a estrutura de diretórios necessária para o correto funcionamento do ZF.</p>
<p><img src="http://felipetonello.com/blog/wp-content/uploads/2007/08/snapshot5.png" alt="diretórios" /></p>
<p><strong>PS: a pasta ZF-tutorial fica dentro do DocumentRoot, que é onde fica suas páginas no servidor(padrão do apache: <em>htdocs/</em> ou <em>/var/www/</em>).</strong></p>
<p>No caso a pasta <em>controllers, models e views</em> estão dentro da pasta <em>app</em>(application, nome sugestivo)<em>. publico</em> é onde vai suas outras coisas normais como imagens e css, js e assim por diante.<em> E lib</em> é a pasta onde vai ficar o ZF.</p>
<p>Entre na pasta onde você descompactou o arquivo tarball(.tar.gz), depois entre na pasta <strong>library</strong> e copie a pasta <strong>zend</strong> para a sua pasta <strong>lib</strong>(na ZF-tutorial) do seu sistema. Talvez você precise mudar(ou copiar) como root, aqui no exemplo vou usar sem o root.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>ZendFramework-1.0.1<span style="color: #000000; font-weight: bold;">/</span>library
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-Rfv</span> Zend<span style="color: #000000; font-weight: bold;">/</span> documentRoot_do_apache<span style="color: #000000; font-weight: bold;">/</span>ZF-tutorial<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Aí depois no diretório <strong>lib</strong> irá ter <strong>lib/Zend</strong>, certo?</p>
<p><img src="http://felipetonello.com/blog/wp-content/uploads/2007/08/snapshot6.png" alt="lib/Zend" /></p>
<blockquote><p>Configurando o Apache</p></blockquote>
<p>Primeira coisa que temos a fazer é abilitar o módulo rewrite do apache.<br />
Edite o arquivo de configuração do apache, <strong>httpd.conf</strong>.<br />
Descomente(tirando o #) a linha onde está escrito:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">LoadModule</span> rewrite_module modules/mod_rewrite.so
<span style="color: #00007f;">AddModule</span> mod_rewrite.c</pre></div></div>

<p>Defina o AccessFileName (pode ser no final do arquivo):</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">AccessFileName</span> .htaccess</pre></div></div>

<p>Setar a opção AllowOverride como All.</p>
<p>Trocar as linhas abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">#&amp;lt;Directory /&amp;gt;</span>
<span style="color: #adadad; font-style: italic;"># Options Indexes FollowSymLinks</span>
<span style="color: #adadad; font-style: italic;"># AllowOverride None</span>
<span style="color: #adadad; font-style: italic;">#&amp;lt;/Directory&amp;gt;</span></pre></div></div>

<p>por:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&amp;lt;directory&amp;gt;
<span style="color: #00007f;">Options</span> <span style="color: #0000ff;">FollowSymLinks</span> <span style="color: #0000ff;">Includes</span>
<span style="color: #00007f;">AllowOverride</span> <span style="color: #00007f;">All</span>
&amp;lt;/directory&amp;gt;</pre></div></div>

<blockquote><p>Criando o Bootstrapping</p></blockquote>
<p>O controller do ZF, Zend_Controller, é feito para suportar websites com urls limpas.<br />
Então, todas as requisições precisam ser feitas diretamente em um arquivo index.php, essa prática é conhecida como bootstrapping.<br />
E para isso precisamos criar alguns arquivos <strong>.htaccess</strong>.</p>
<p>ZF-tutorial/<strong>.htaccess</strong></p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">on</span>
<span style="color: #00007f;">RewriteRule</span> .* index.php
php_flag magic_quotes_gpc <span style="color: #0000ff;">off</span>
php_flag register_globals <span style="color: #0000ff;">off</span></pre></div></div>

<p>Essa RewriteRule quer dizer que para qualquer coisa escrita ele(apache) irá redirecionar para o index.php(que fica dentro do ZF-tutorial, calma que ainda vamos cria-lo). <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Alí também setamos algumas configurações do <em>PHP.ini</em>. Essas configurações provavelmente já estão setadas como padrão, mas é bom ter certeza né. Elas só vão funcionar se estiver habilitado o <em>mod_php</em> no <em>httpd.conf</em> do apache.</p>
<p>Agora vamos setar nosso <strong>.htaccess</strong> na pasta <strong>público</strong>. Lá estará os arquivos JavaScript, CSS, imagens e assim por diante. Então vamos habilitar tudo por lá.</p>
<p>ZF-tutorial/publico/<strong>.htaccess</strong></p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">off</span></pre></div></div>

<p>Agora na pasta <strong>app</strong> e no <strong>lib</strong> não queremos que nenhum intruso acesse, porque lá estão nossos arquivos preciosos. <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
ZF-tutorial/app/<strong>.htaccess</strong></p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">deny</span> <span style="color: #00007f;">from</span> <span style="color: #00007f;">all</span></pre></div></div>

<p>ZF-tutorial/lib/<strong>.htaccess</strong></p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">deny</span> <span style="color: #00007f;">from</span> <span style="color: #00007f;">all</span></pre></div></div>

<p>Esse esquema de bootstrapping é recomendação dos desenvolvedores do ZF, ok? Motivo de segurança, sabe como é né.</p>
<blockquote><p>Criando o nosso index.php(bootstrap file)</p></blockquote>
<p>Agora vamos criar nossa index.php na pasta ZF-tutorial.<br />
ZF-tutorial/<strong>index.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">error_reporting</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">E_ALL</span><span style="color: #339933;">|</span>E_STRICT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// para mostrar os erros, apenas nos testes(precisa estar setado no PHP.ini)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Seta o timezone pra são paulo (&amp;gt;=PHP 5.1)</span>
<span style="color: #990000;">setlocale</span> <span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'pt_BR'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">date_default_timezone_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'America/Sao_Paulo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Seta include path para o funcionamento correto do framework ***OBRIGATÓRIO*** */</span>
<span style="color: #990000;">set_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.'</span><span style="color: #339933;">.</span>PATH_SEPARATOR<span style="color: #339933;">.</span><span style="color: #0000ff;">'./lib'</span>
<span style="color: #339933;">.</span>PATH_SEPARATOR<span style="color: #339933;">.</span><span style="color: #0000ff;">'./app/models/'</span> <span style="color: #666666; font-style: italic;">//facilitar depois ao loadar as nossos modelos</span>
<span style="color: #339933;">.</span>PATH_SEPARATOR<span style="color: #339933;">.</span><span style="color: #990000;">get_include_path</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Necessário para loadar qualquer outra classe do framework ***OBRIGATÓRIO*** */</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">&quot;Zend/Loader.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//loada o controller front</span>
Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Controller_Front'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
 Essa classe se encontra em Zend/Controller/Front.php
 Pode ser loadado diretamente pelo nome se preferir
&nbsp;
 Para começar nós precisamos loadar primeiro o front controller
 Ele faz um controle automático para detectar a base URL e fazer o redirecionamento correto
 */</span>
<span style="color: #000088;">$controlador</span> <span style="color: #339933;">=</span> Zend_Controller_Front<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$controlador</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">throwExceptions</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// mostrar excessões(apenas para testes)</span>
<span style="color: #000088;">$controlador</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setControllerDirectory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./app/controllers'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// seta diretório com nossos controllers</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Roda o sistema</span>
<span style="color: #000088;">$controlador</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dispatch</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//sem fechar a tag php</span></pre></div></div>

<p>Note que agente não fecha a tag php para nos previnir de erros usando o header(), no caso de espaços em branco adicionais depois do ?&gt;.</p>
<p>Agora na <em>pasta controllers</em> vamos criar um <strong>IndexController.php</strong>. Esse controller vai entrar em ação sempre que o index for chamado.<br />
Para entender como funciona, precisamos saber como o Zend_Controller_Front trabalha.<br />
O ZF usa um sistema de Controllers(Controladores) e Actions(Ações). E isso é setado diretamente na url(lembra do bootstrapping?). Como?<br />
Usando o nosso exemplo, no formato <strong>http://localhost/ZF-tutorial/<em>index</em>/<em>teste</em></strong> o <strong>index</strong> é o Controller e o <strong>teste</strong> é o Action. Outro exemplo, <strong>http://localhost/ZF-tutorial/<em>foo</em>/<em>bar</em></strong> o <strong>foo</strong> é o Controller e o <strong>bar</strong> é o Action.<br />
E quando você não coloca nada? Exemplo, <strong>http://localhost/ZF-tutorial/</strong> o Zend_Controller_Front considera como <strong>index</strong> o Controller e <strong>index</strong> a Action.<br />
O que vem depois é parâmetro, mas isso é assunto pra depois <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Vamos fazer nosso IndexController então<br />
ZF-tutorial/app/controllers/<strong>IndexController.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> IndexController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> indexAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">titulo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Primeiro Tutorial de Zend Framework'</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">detalhe</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Olá Mundo!'</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Atenção: Sempre o controller deve levar esse padrão NomeController.php e a classe com o mesmo nome do arquivo. A primeira letra sempre em maiúsculo e o resto minúsculo.<br />
Já os Actions também deve levar esse padrão nomeAction(), sempre minúsculo.</strong></p>
<p>Mas se você for rodar o sistema agora, vai perceber que vai dar uma excpetion gigantesca aí, certo?<br />
Ela está falando que nós não temos o <strong>viewer</strong> para o <em>index</em> action do <em>index</em> controller.</p>
<p>Para criar, precisamos acessar a pasta scripts que está no ZF-tutorial/views/. Lá vamos criar uma pasta para cada Controller nosso, no nosso caso iremos criar uma pasta chamada index(por causa do IndexController). Todos os templates para o IndexController devem estar nessa pasta. O mais legal é que o nome do template leva o nome da action.<br />
Calma, vou explicar: Por padrão cada action você pode ter um template ou não, mas se a action for tem um template para ela, então o template deve levar o mesmo nome da action. Por exemplo index.phtml(extenção do template) é o viewer do indexAction(), sacaram?</p>
<p>Na prática agora:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> documentRoot_do_apache<span style="color: #000000; font-weight: bold;">/</span>ZF-tutorial<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>scripts
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> index</pre></div></div>

<p>Agora nós temos que criar o <strong>index.phtml</strong><br />
ZF-tutorial/app/views/scripts/index/<strong>index.phtml</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>html<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>head<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>title<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;</span>?php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>escape<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>titulo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>lt<span style="color: #339933;">;/</span>title<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>head<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>body<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
  <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>escape<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>detalhe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>body<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span>
<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;/</span>html<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></div></div>

<p>é recomendável que usemos o escape para escapar tags html.</p>
<p>Agora vamos testar nossa aplicação.<br />
Acesse o <strong>http://localhost/ZF-tutorial</strong> e depois tente <strong>http://localhost/ZF-tutorial/index/index</strong><br />
Você vai perceber que deu no mesmo.</p>
<blockquote><p>Tarefinha, de leve</p></blockquote>
<p>Agora deixo uma tarefa para vocês: Criar um zfAction(), no IndexController, com seu respectivo viewer. Após criado, acessem <strong>http://localhost/ZF-tutorial/index/zf</strong> e vejam o que aconte!</p>
<blockquote><p>Conclusões</p></blockquote>
<p>Apesar desse tutorial mostrar de maneira simples como funciona o Zend Framework, podemos perceber como o Zend Frameowork é facil de usar e ao mesmo tempo é poderoso.<br />
Para um maior aprendizado, irei postar um novo tutorial com muito mais recursos do ZF.</p>
<p>Por enquanto eu recomendo um <a href="http://akrabat.com/wp-content/uploads/getting-started-with-the-zend-framework_142.pdf">tutorial muito bom</a>(desenvolvedor do ZF), eu me baseei no tutorial dele, e tabmém usem bastante o <a href="http://framework.zend.com/manual">manual</a>.</p>
<p>Acesse a  página de tutoriais do <a href="/blog/tutorial-zend-framework/">Zend Framework</a></p>
<p>Cya later!!</p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2007/02/28/zend-framework-para-um-php-mais-poderoso/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>Engatinhando com AJAX e PHP. Parte 2</title>
		<link>http://felipetonello.com/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/</link>
		<comments>http://felipetonello.com/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 16:29:16 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/</guid>
		<description><![CDATA[Nesse tutorial vamos fazer nosso primeiro exemplo de AJAX + PHP. Vamos usar primeiramente o XMLHttp GET Request. Quem não viu ainda, a parte 1 do tutorial você encontra aqui mesmo. [update 03/10/07] Parte 1 do tutorial AJAX + PHP Parte 3 do tutorial AJAX + PHP [/update] Bora lá!! Criando o Objeto XMLHttp Vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse tutorial vamos fazer nosso primeiro exemplo de AJAX + PHP.<br />
Vamos usar primeiramente o <em>XMLHttp GET Request</em>.</p>
<p>Quem não viu ainda, a parte 1 do tutorial você encontra <a href="/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/" title="Engatinhando com AJAX e PHP. Parte 1">aqui mesmo</a>.</p>
<p>[update 03/10/07]<br />
<a href="/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/" title="Engatinhando com AJAX e PHP. Parte 1">Parte 1 do tutorial AJAX + PHP</a><br />
<a href="/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/" title="Engatinhando com AJAX e PHP. Parte 3">Parte 3 do tutorial AJAX + PHP</a><br />
[/update]</p>
<p>Bora lá!!</p>
<blockquote><p><strong>Criando o Objeto XMLHttp</strong></p></blockquote>
<p>Vamos mexer um pouco no JavaScript para criar a requisição.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> criaXMLHttp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest <span style="color: #339933;">!=</span> <span style="color: #3366CC;">&quot;undefined&quot;</span><span style="color: #009900;">&#41;</span>
 	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> versoes <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;MSXML2.XMLHttp.5.0&quot;</span><span style="color: #339933;">,</span>
 	<span style="color: #3366CC;">&quot;MSXML2.XMLHttp.4.0&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;MSXML2.XMLHttp.3.0&quot;</span><span style="color: #339933;">,</span>
 	<span style="color: #3366CC;">&quot;MSXML2.XMLHttp&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Microsoft.XMLHttp&quot;</span>
 	<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> versoes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
 	<span style="color: #000066; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
 		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span>versoes<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Seu browser nao suporta AJAX&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Primeiro ela testa se o browser suporta o XMLHttpRequest e cria se o suportar.. se não ele cria um array com várias versões do XMLHttp para browsers mais antigos(IE). E fica em um loop até conseguir criar um objeto, se não criar nenhum ele retorna a mensagem de erro.<br />
Resumindo: a função testa as possibilidades do browser de criar o objeto XMLHttp. Se for o IE 6.0 ele cria o MSXML2.XMLHttp.5.0 e assim por diante.</p>
<blockquote><p><strong>Usando o XMLHttp</strong></p></blockquote>
<p>O objeto XMLHttp tem um método que a mais imporante, a <em>open()</em>. Ela tem 3 parâmetros que precisamos saber:</p>
<ul>
<li><strong>Tipo da </strong>requisição: sintrg que indique o tipo: get ou post</li>
<li><strong>URL</strong>: string com a url que você quer fazer a requisição</li>
<li><strong>Async</strong>: boolean que indica se o modo da requisição seja feito assincronamente(não sei escrever essa palavra <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  )</li>
</ul>
<p>O ultimo parâmetro é o mais importante.. ele que vai dizer se a sua requisição é AJAX mesmo ou não. Se ele for <em>true</em>, a requisição é feita em tempo real. Já se você colocar <em>false</em>, a requisição é feita e o resto da página só é loadada quando a requisição retornar algo ou terminar.<br />
Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> XMLHttp <span style="color: #339933;">=</span> criaXMLHttp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
XMLHttp.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;get&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;info.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Outro evento importante no XMLHttp é o <em>onreadystatechange</em>. O XMLHttp tem uma propriedade chamada <em>readyState</em> que muda conforme a requisição é recebida. Existem 5 estados para o <em>readyState</em>:</p>
<ul>
<li><strong>0(Não Iniciado)</strong>: O Objeto foi criado mas o método <em>open()</em> não foi chamado ainda.</li>
<li><strong>1(Carregando)</strong>: O método <em>open()</em> foi chamado mas a requisição não foi enviada ainda.</li>
<li><strong>2(Carregado)</strong>: A requisição foi enviada.</li>
<li><strong>3(Incompleto)</strong>: Uma parte da resposta do servidor foi recebida.</li>
<li><strong>4(Completo)</strong>: Todos as informações foram recebidas e a conexão foi fechada com sucesso.</li>
</ul>
<p>Toda vez que a propriedade do <em>readyState</em> for mudada, o evento <em>onreadystatechange</em> é disparado. Por causa das diferentes implementações dos browsers, a propriedade do <em>readyState</em> não funciona corretamente em todos os browsers. O unico modo para cross-browser é usando o valor 0, 1 e 4 para o <em>readyState</em>. Mas na maioria dos casos você usará apenas o estado 4 mesmo.<br />
Depois de tudo isso temos que realmente enviar a requisição com o método <em>send()</em>. Quando utilizamos a requisição por GET nós não precisamos passar nenhum parâmetro no <em>send()</em>. Depois quando vermos com POST aí iremos usar mais profundamente. <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> XMLHttp <span style="color: #339933;">=</span> criaXMLHttp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
XMLHttp.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;get&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;info.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
XMLHttp.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>XMLHttp.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span>
 	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;EEE primeiro teste com AJAX!! :)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
XMLHttp.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tá bom, mas e agora? Enviei tudo, recebi e pronto. Cadê minha informação?<br />
Ta certo, agora é bem simples, existe uma propriedade no XMLHttp que ele tem o retorno do http request, o responseText(no nosso caso, poderia ser responseXML). Lembram da primeira parte do tutorial? Então, agora vamos usar ela.<br />
Primeiro vamos testar se a informação retornada veio com sucesso (200). Para testarmos o status do retorno existe a propriedade status do XMLHttp. Tudo muito simples não? Então olha o exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>XMLHttp.<span style="color: #000066;">status</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;O retorno foi: &quot;</span> <span style="color: #339933;">+</span> XMLHttp.<span style="color: #660066;">responseText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">else</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;O retorno foi: &quot;</span> <span style="color: #339933;">+</span> XMLHttp.<span style="color: #660066;">statusText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Beleza. Até aí vimos exemplo bem bobos, apenas para intendermos como funciona as coisas.<br />
Agora sim vamos ver como fica uma aplicação com AJAX e PHP.</p>
<p>Já temos a função que retorna o Objeto XMLHttp, então vamos fazer a partir dela.<br />
Agora vamos para o código HTML.<br />
Criamos duas <em>divs</em>. Uma vai exibir o resultado e outra vai ser o campo onde você coloca o id para fazer a pesquisa.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;resultado&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lerid&quot;</span>&gt;</span>
Id: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;id&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;id&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;OKA!!&quot;</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lerId()&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>Agora, na função <em>lerId()</em> temos que pegar o valor do <em>campo id</em> e enviar ele na requisição usando GET e depois disso, recebemos o valor e exibimos na <em>div resultado</em>.<br />
Fica assim:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> lerId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> divInfo <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;resultado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> XMLHttp <span style="color: #339933;">=</span> criaXMLHttp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	XMLHttp.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;get&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;lerId.php?id=&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	XMLHttp.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>XMLHttp.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>XMLHttp.<span style="color: #000066;">status</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				divInfo.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> XMLHttp.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
				divInfo.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Um erro ocorreu&quot;</span> <span style="color: #339933;">+</span> XMLHttp.<span style="color: #660066;">statusText</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	XMLHttp.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como já vimos como funciona a requisição XMLHttp não vamos ter muita dificuldade de entender essa. A unica diferença com o exemplo é que nós passamos um parâmetro para a página <em>pegaId.php</em> e exibir o resultado no <em>div resultado</em>.</p>
<p>Agora vamos criar a página pegaId.php que irá ler o id enviado pela requisição Http e retornar o status.<br />
<strong>lerId.php:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// mudamos o tipo de arquivo.. ao invez de php irá retornar um texto normal</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Type: text/plain&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// recebe o id que veio pelo parametro usando o método GET</span>
<span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$resultado</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// isso agora é um exemplo, você tem que aplicar a conexão e a consulta sql à sua necessidade</span>
<span style="color: #000088;">$BDUsuario</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;seu usuario ou root&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$BDSenha</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;senha do usuario&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$BDServidor</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;localhost normalmente ou o servidor de banco de dados&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$BancoDeDados</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;nome do seu banco de dados&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$BDServidor</span><span style="color: #339933;">,</span> <span style="color: #000088;">$BDUsuario</span><span style="color: #339933;">,</span> <span style="color: #000088;">$BDSenha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$BancoDeDados</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM tabela WHERE id = &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$resultado</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mysql_fetch_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000088;">$resultado</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ID Encontrado
	<span style="color: #000099; font-weight: bold;">\n</span>
	Nome: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$resultado</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nome'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$resultado</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Agora o seu primeiro programa com AJAX está escrito.. bem simples não?<br />
Ele só recebe o id que veio por GET, procura no banco de dados, e exibe o nome da pessoa referente ao id(exemplo apenas)..<br />
A unica coisa que pode ficar meio no ar é a questão do <em>header</em> e do <em>echo</em> no final. O header serve para fazer com que o retorno do arquivo fique em formato texto e não em outro tipo(como html, php). Pois nós usamos o XMLHttp.responseText. Se você colocar alguma tag html, na pagina principal, onde o script é rodado, irá funcionar o html, pois a página é html. Agora se você rodar o lerId.php ele irá exibir como se fosse um texto normal.<br />
O echo serve apenas para exibir o resultado. Todo o resultado que você quer que seja exibido no cliente você tem que exibir em seu script php, pois o XMLHttp.responseText pega justamente o que a página php(server-side) exibe, no caso um texto.</p>
<p>Terminamos por hoje nossa aula de AJAX com PHP parte 2.</p>
<p><a href="/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/" title="Engatinhando com AJAX e PHP. Parte 3">Na proxima aula vamos ver como funciona a requisição pelo método POST.</a></p>
<p>Dúvidas podem comentar.</p>
<p>Abraços</p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Engatinhando com AJAX e PHP. Parte 1</title>
		<link>http://felipetonello.com/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/</link>
		<comments>http://felipetonello.com/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/#comments</comments>
		<pubDate>Tue, 14 Nov 2006 19:30:22 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/</guid>
		<description><![CDATA[Esse é meu primeiro tutorial sobre AJAX e espero que não seja o único. [update 03/10/07] Parte 2 do tutorial AJAX + PHP Parte 3 do tutorial AJAX + PHP [/update] Como esse tutorial é bem básico, para quem está começando com AJAX, eu vou esplicar explicar coisas bem básicas. Desde como funciona o protocolo [...]]]></description>
			<content:encoded><![CDATA[<p>Esse é meu primeiro tutorial sobre AJAX e espero que não seja o único. <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>[update 03/10/07]<br />
<a href="/blog/2007/01/20/engatinhando-com-ajax-e-php-parte-2/" title="Engatinhando com AJAX e PHP. Parte 2">Parte 2 do tutorial AJAX + PHP</a><br />
<a href="/blog/2007/10/01/engatinhando-com-ajax-e-php-parte-3/" title="Engatinhando com AJAX e PHP. Parte 3">Parte 3 do tutorial AJAX + PHP</a><br />
[/update]</p>
<p>Como esse tutorial é bem básico, para quem está começando com AJAX, eu vou <strike>esplicar </strike>explicar coisas bem básicas. Desde como funciona o protocolo HTTP e um exemplo de AJAX.</p>
<p>Para que você possa usufruir ao máximo do tutorial, você necessita de conhecimentos de HTML, JavaScript e PHP.</p>
<p>Vamos ver aqui então: Como funciona um <em>HTTP request</em>, um <em>HTTP response</em>, técnicas utilizadas e como comunicar o cliente com o servidor.</p>
<blockquote><p><strong>HTTP Resquests</strong></p></blockquote>
<p>O formato de um HTTP request é assim:<br />
<code>&lt;requeste-line&gt;<br />
&lt;headers&gt;<br />
&lt;blank line&gt;<br />
[&lt;request-body&gt;]</code></p>
<p>A primeira linha(<em>&lt;requeste-line&gt;</em>) necessita da indicação do tipo do <em>request</em>, diretório de acesso eda versão do HTTP. Já no <em>&lt;headers&gt;</em>  indica informações adicionais para o server. Depois a &lt;blank line&gt;, é seguida do &lt;request-body&gt; que é opcional.</p>
<p>Não vou ficar explicando muito aqui, pois não é o foco do nosso tutorial. Agora vou mostrar um exemplo prático de como o browser envia o HTTP request:<br />
<code>GET /?cod=1 HTTP/1.1<br />
Host: www.felipetonello.com<br />
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)<br />
Connection: Keep-Alive</code></p>
<p>Explicando resumidamente: Na primeira linha vimos que usamos o tipo <em>GET</em> seguido da <em>/</em> quer dizer que irá acessar ao diretório root do server com o parametro cod=1 e em seguida da versão do HTTP. Depois os cabeçalhos que são auto-explicativo.<br />
Quem usa PHP a um tempo conhece bem esses <a href="http://br.php.net/header">headers</a>.</p>
<p>Então vimos como o browser se comunica com os servidores por meio do HTTP(Hypertext Transfer Protocol).</p>
<blockquote><p><strong>HTTP Responses</strong></p></blockquote>
<p>Agora vamos ver como o servidor responde, quando recebe um request, por meio do HTTP.<br />
<code>&lt;status-line&gt;<br />
&lt;headers&gt;<br />
&lt;blank line&gt;<br />
[&lt;response-body&gt;]</code></p>
<p>O formato é bem parecido, apenas muda a primeira e ultima linha. Na primeira linha ele retorna a versão do HTTP e o status da resposta. Já na ultima ele retorna o corpo da resposta. Exemplo:<br />
<code>HTTP/1.1 200 OK<br />
Date: Sat, 11 Nov 2006 23:59:59 GMT<br />
Content-Type: text/html;charset=UTF-8<br />
Content-Length: 122</code><br />
<code><br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Felipe Tonello&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;!-- Aqui vem o corpo --&gt;<br />
&lt;/body&gt;<br />
&lt;/hmtl&gt;</code></p>
<p>Na primeira linha temos a versão do HTTP em seguida do status(200). Os cabeçalhos e depois a resposta que no caso foi como um text/html.<br />
Os status mais comuns são:</p>
<ul>
<li><strong>200 (OK)</strong>: arquivo encontrado com sucesso.</li>
<li><strong>304 (NOT MODIFIED)</strong>: O arquivo não foi modificado desde o ultimo request. Isso é mais utilizado em browsers com mecanismos de cache.</li>
<li><strong>401 (UNAUTHORIZED)</strong>: Cliente não tem autorização para acessar o arquivo. Normalmente isso irá fazer com que o browser pergunte por usuário e senha para logar no servidor.</li>
<li><strong>403 (FORBIDDEN)</strong>: O Cliente falhou na autorização. Normalmente acontece quando você falha na autorização depois de um erro 401.</li>
<li><strong>404 (NOT FOUND)</strong>: Quando o arquivo não existe na localização informada.</li>
</ul>
<p>Nesse tutorial vocês entenderam como funciona o protocolo HTTP para se comunidar entre servidor e cliente.<br />
Para não ficar muito grande vou separar em 2 partes. Na proxima parte vamos ver um exemplo de comunicação cliente-servidor usando AJAX.</p>
<p>Até mais. <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2006/11/14/engatinhando-com-ajax-e-php-parte-1/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Instalando LAMPP(Linux + Apache + MySQL + PHP + Perl). Mais facil impossivel!</title>
		<link>http://felipetonello.com/blog/2006/08/11/instalando-lampplinux-apache-mysql-php-perl-mais-facil-impossivel/</link>
		<comments>http://felipetonello.com/blog/2006/08/11/instalando-lampplinux-apache-mysql-php-perl-mais-facil-impossivel/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 02:41:46 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[lampp]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2006/08/11/instalando-lampplinux-apache-mysql-php-perl-mais-facil-impossivel/</guid>
		<description><![CDATA[Alguns programadores sabendo da &#8220;dificuldade&#8221; para instalar o lampp (compilar mysql, php etc..) criaram um XAMPP. Resumindo ele é um programa q instala tudo que falei no tópico, Apache, MySQL, PHP e Perl, fora as bibliotecas mais usadas e etc&#8230; Vamos lá.. Primeiro baixe a ultima versão do download do xampp(no caso 1.6.4): http://www.apachefriends.org/download.php?xampp-linux-1.6.4.tar.gz depois [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns programadores sabendo da &#8220;dificuldade&#8221; para instalar o lampp (compilar mysql, php etc..) criaram um XAMPP.</p>
<p>Resumindo ele é um programa q instala tudo que falei no tópico, Apache, MySQL, PHP e Perl, fora as bibliotecas mais usadas e etc&#8230;</p>
<p>Vamos lá..</p>
<p>Primeiro baixe a ultima versão do download do xampp(no caso 1.6.4):<br />
<a href="http://www.apachefriends.org/download.php?xampp-linux-1.6.4.tar.gz">http://www.apachefriends.org/download.php?xampp-linux-1.6.4.tar.gz</a></p>
<p><a href="http://www.apachefriends.org/download.php?xampp-linux-1.5.3a.tar.gz"></a><br />
depois abra o terminal e digite:</p>
<p><code>sudo tar xvfz xampp-linux-1.6.4.tar.gz -C /opt</code><br />
só utilize este comando para instlar, não use nenhum outro descompactador nada&#8230;<br />
e se você ja tiver instalado xampp outra vez, ele sobre escreve&#8230;<br />
ele vai instalar tudo na pasta /opt/lampp</p>
<p><span id="more-31"></span><br />
Agora é só startar  <img src='http://felipetonello.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
terminal denovo:<br />
<code>$ sudo /opt/lampp/lampp start</code></p>
<p>se aparecer<br />
<strong>Starting XAMPP 1.6.4&#8230;<br />
LAMPP: Starting Apache&#8230;<br />
LAMPP: Starting MySQL&#8230;<br />
LAMPP started.</strong><br />
estará tudo certo, caso contrario vá ao <a href="http://www.apachefriends.org/en/faq-xampp-linux.html#start" title="XAMPP Linux FAQ">Linux FAQ</a><br />
Abra seu web-browser e digite http://localhost na barra de endereços&#8230;</p>
<p><img src="http://images.apachefriends.org/images/380.jpg" height="354" width="414" /></p>
<p>Existem alguns quesitos de segurança que você pode arrumar como:<br />
1. O administrador MySQL (root) não contém senhas.<br />
2. O MySQL pode ser acessado via network normal.<br />
3. ProFTPD usa a senha &#8220;lampp&#8221; para o usuário &#8220;nobody&#8221;.<br />
4. PhpMyAdmin é acessivel via network.<br />
5. Examples são acessiveis via network.<br />
6. MySQL e o  Apache estão rodando sob o mesmo usuário (nobody).</p>
<p>para mudar a segurança digite o comando:<br />
<code>$ sudo /opt/lampp/lampp security</code><br />
e siga os passos.</p>
<blockquote><p><strong>PHP 4 ou PHP 5?</strong></p></blockquote>
<p>Por causa das grandes mudanças que temos na versão 5 do PHP, a partir da versão 1.4.7 podemos mudar: PHP 5.x e PHP 4.x. Se você tiver uma aplicação PHP que só funciona na versão 4, você pode fazer isso.</p>
<p>Mudando para a versõa 4:<br />
<code>$ sudo /opt/lampp/lampp php4</code></p>
<p>Mudando para a versõa 5:<br />
<code>$ sudo /opt/lampp/lampp php5</code></p>
<p>Vendo a versão:<br />
<strong>sudo /opt/lampp/lampp phpstatus</strong></p>
<blockquote><p><strong>Parametros Avançados:</strong></p></blockquote>
<p><strong><em>start</em></strong>     Starta o XAMPP.<br />
<strong><em>stop</em></strong>     Para o XAMPP.<br />
<strong><em>restart</em></strong>     Para e starta o XAMPP.<br />
<strong><em>startapache</em></strong>     Starta apenas o Apache.<br />
<strong><em>startssl</em></strong>     Starta o suporte SSL para o apache. Esse comando é permanente, exemplo: se você restartar o XAMPP esse parâmetro continua.<br />
<strong><em>startmysql</em></strong>     Starta só o MySQL.<br />
<strong><em>startftp</em></strong>     Starta o ProFTPD server. Via FTP você consegue dar upload para seu server (usuário &#8220;nobody&#8221;, senha &#8220;lampp&#8221;). Esse comando é permanente, exemplo: se você restartar o XAMPP esse parâmetro continua.<br />
<strong><em>stopapache</em></strong>     Para o Apache.<br />
<strong><em>stopssl</em></strong>     Para o suporte SSL do apache. Esse comando é permanente, exemplo: se você restartar o XAMPP esse parâmetro continua.<br />
<strong><em>stopmysql</em></strong>     Para o MySQL.<br />
<strong><em>stopftp</em></strong>     Para o ProFTPD. Esse comando é permanente, exemplo: se você restartar o XAMPP esse parâmetro continua.<br />
<strong><em>security</em></strong>     Starta um programa de segurança.</p>
<p>exemplo:<br />
<code>$ sudo /opt/lampp/lampp startssl</code></p>
<p>você pode acessar o Apache servidor via o SSL: https://localhost</p>
<blockquote><p><strong>Pastas/Arquivos importantes:</strong></p></blockquote>
<p><strong><em>/opt/lampp/bin/</em></strong>     pasta raiz do XAMPP. /opt/lampp/bin/mysql chama o MySQL monitor.<br />
<strong><em>/opt/lampp/htdocs/</em></strong>     DocumentRoot do apache. Pasta onde vai as páginas, sites, etc.<br />
<strong><em>/opt/lampp/etc/httpd.conf</em></strong>     arquivo de configuração do apache.<br />
<strong><em>/opt/lampp/etc/my.conf</em></strong>     Arquivo de configuração do MySQL.<br />
<strong><em>/opt/lampp/etc/php.ini</em></strong>     Arquivo de configuração do PHP.<br />
<strong><em>/opt/lampp/etc/proftpd.conf</em></strong>     Arquivo de configuração do ProFTPD. (desde 0.9.5)<br />
<strong><em>/opt/lampp/phpmyadmin/config.inc.php</em></strong>     Arquivo de configuração do PHPMyAdmin.</p>
<blockquote><p><strong>Parando o XAMPP:</strong></p></blockquote>
<p><code>$ sudo /opt/lampp/lampp stop</code></p>
<p>irá ver algo do tipo:<br />
<strong>Stopping LAMPP 1.6.4&#8230;<br />
LAMPP: Stopping Apache&#8230;<br />
LAMPP: Stopping MySQL&#8230;<br />
LAMPP stopped.</strong></p>
<p>O XAMPP Parou.</p>
<blockquote><p><strong>Desinstalando:</strong></p></blockquote>
<p>Apenas o comando:<br />
<code>$ sudo rm -Rf /opt/lampp</code></p>
<p>o XAMPP foi desinstalado completamente.</p>
<p>Viu como é facil??</p>
<p>Muitos devem estar pensando que não querem usar o XAMPP por que gostam de configurar manualmente, etc&#8230; eu concordo com isso&#8230; mas podemos facilmente configurar tudo pelo XAMPP..</p>
<p>Eu recomendo usar o XAMPP para quem ja é usuario experiente e sabe instalar manualmente e quem está com pressa, hehe. Pois é aconcelhavel instalar manualmente para aprender como funciona tudo certinho, etc..</p>
<p>Lembrando que o XAMPP tem versão para windows, Solaris e MacOS..</p>
<p>para mais informações visite o site:<br />
<a href="http://www.apachefriends.org/en/index.html" title="XAMPP">http://www.apachefriends.org/en/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2006/08/11/instalando-lampplinux-apache-mysql-php-perl-mais-facil-impossivel/feed/</wfw:commentRss>
		<slash:comments>74</slash:comments>
		</item>
		<item>
		<title>PHP: Entendendo o PHP5</title>
		<link>http://felipetonello.com/blog/2006/05/15/php-entendendo-o-php5/</link>
		<comments>http://felipetonello.com/blog/2006/05/15/php-entendendo-o-php5/#comments</comments>
		<pubDate>Mon, 15 May 2006 18:05:12 +0000</pubDate>
		<dc:creator>Felipe Tonello</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://felipetonello.com/blog/2006/05/15/php-entendendo-o-php5/</guid>
		<description><![CDATA[Mesmo o PHP5 sendo lançado a um bom tempo já, e também ja sabemos que irá lançar o PHP6, muitas pessoas não sabem realmente a principal diferença entre o PHP5 e o PHP4(ou anteriores). Com esse artigo eu irei mostrar as principais mudanças. A principal mudança do PHP5 é a Orientação a Objetos. No PHP5 [...]]]></description>
			<content:encoded><![CDATA[<p>Mesmo o <a href="http://www.php.net" title="Hypertext Preprocessor">PHP5</a> sendo lançado a um bom tempo já, e também ja sabemos que irá lançar o <a href="http://news.php.net/php.internals/17883" title="PHP6 Wishlist">PHP6</a>, muitas pessoas não sabem realmente a principal diferença entre o <a href="http://www.php.net/php5">PHP5</a> e o <a href="http://www.php.net/php4">PHP4</a>(ou anteriores). Com esse artigo eu irei mostrar as principais mudanças.</p>
<p><strong>A principal mudança do PHP5 é a <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto" title="Orientação a Objeto">Orientação a Objetos</a></strong>. No PHP5 os engenheiros do <a href="http://www.zend.com" title="The PHP Company">Zend</a> reescreveram toda o modulo de orientação a objetos para melhor performance e mais poder também na linguagem.<span id="more-24"></span></p>
<p>Aqui vou mostrar a como usar essas novas funções e como aplica-las(vou ser bem objetivo, sem balblalb).</p>
<p>Uma classe no PHP funciona assim:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> ClasseExemplo
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// declaração da variável</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$var</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Olá Mundo'</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// declaração do método</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> exibeVar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">var</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$classe</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClasseExemplo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$classe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exibeVar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Essa é uma classe exemplo onde que podemos notar algumas regras:</p>
<ul>
<li>Declação de varivel da classe(que poderá usar em vários metodos da mesma classe)</li>
<li>Declaração do método</li>
<li>Declarar a prioridade de acesso do método e da variável</li>
<li>Para chamar a classe você usa sintaxe $variavel = new NomeClasse();</li>
</ul>
<p>Caso alguém já trabalhou com C++ ou Java, irá notar grande similaridade. Caso não, vamos as explicações:<br />
Toda variável que será usada em diversos métodos(global) tem que ser declarada na classe e não no método. O método na verdade é mesma coisa que a função, mas por questão de nomenclatura a função dentro de uma classe se chama método.</p>
<p>Toda variável global ou método tem que ter uma prioridade(visibilidade). O que é isto?<br />
Essa prioridade é quem vai mostrar para a classe se outra classe, ou se outros métodos ou se fora da classe você poderá chamar ela. Isso vale tanto pra métodos ou variáveis. Mas como assim?</p>
<p>Vou mostrar os tipos de prioridades que temos e assim os exemplos para vocês entenderem melhor. A visibilidade se aplica tanto para métodos quanto para variáveis.</p>
<blockquote><p>Visibilidade e Classes Filhas</p></blockquote>
<p>Existem 3 tipos: <strong>Public(publico)</strong>, <strong>Protected(protegida)</strong>, <strong>Private(privada)</strong>.</p>
<p><strong>Public</strong> &#8211; Publico. Você pode acessa-la dentro e fora da classe. Mais comum entre os métodos<br />
<strong>Protected</strong> &#8211; Você pode acessa-la somente na Classe ou em suas classes filhas. Não tao comum.<br />
<strong>Private</strong> &#8211; Você pode acessar somente dentro da classe. Mais comum nas variáveis.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> MinhaClasse
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$public</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Public'</span><span style="color: #339933;">;</span>
    protected <span style="color: #000088;">$protected</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Protected'</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$private</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Private'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// método public (nao precisa por public, mas é recomendável)</span>
    <span style="color: #000000; font-weight: bold;">function</span> oi<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">public</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protected</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">private</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MinhaClasse<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">public</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Funciona</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protected</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Fatal Error</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">private</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Fatal Error</span>
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">oi</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Exibe Public, Protected e Private</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> MinhaClasse2 <span style="color: #000000; font-weight: bold;">extends</span> MinhaClasse
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Pode-se declarar o public e o protected métodomas não o private</span>
    protected <span style="color: #000088;">$protected</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Protected2'</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> oi<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">public</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protected</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">private</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$obj2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MinhaClasse2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">public</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Funciona</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">private</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Undefined</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protected</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Fatal Error</span>
<span style="color: #000088;">$obj2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">oi</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Exibe Public, Protected2, não Private</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Nesse exemplo está mais claro de entender como funciona a visibilidade do PHP. Mas pode ter certeza que nunca é tão complicado, sempre é bem simples, as variáveis normalmente são private e os métodos public.</p>
<p>E notamos também alí a classe filha(parente, estendida). Ela é uma classe que pertence a classe mãe, no caso a MinhaClasse, e os métodos protected funcionam nela também.</p>
<blockquote><p>Static</p></blockquote>
<p>Existe um modo também de acessar algum método/variável de uma classe sem precisar instância-la. É declarando o método ou variável como static(estática) ou se for uma constante também.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Foo
<span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000088;">$eu_static</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'foo'</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> valorStatic<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
   <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$eu_static</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">print</span> Foo<span style="color: #339933;">::</span><span style="color: #000088;">$eu_static</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// foo</span>
&nbsp;
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valorStatic</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// foo</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<blockquote><p>Construtor e Destrutor</p></blockquote>
<p>O método construtor é rodado quando a classe é instânciada. Ele serve para caso você queira que, por padrão quando instânciar a classe, ela faça algo já automático. Se em sua classe não contenha o método construtor o PHP irá procurar pelo nome de um método igual ao nome da classe, como é feito em Java por exemplo.</p>
<p>Sintaxe: <strong>void</strong> __construct (<em>[void]</em>)</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> BaseClass 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Chamou o construtor<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BaseClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>O método construtor também pode conter parâmetros. Esses parâmetros são passados quando você constrói a classe(instância ela).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> BaseClass 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$eu</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Chamou o construtor e meu nome é &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$eu</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BaseClass<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Felipe&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>E o destrutivo faz exatamente o contrario. Ele é rodado quando a classe é fechada ou quando todos as referencias de um objeto particular for removido.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> ClasseSuicida 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> nome<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Construindo<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ClasseSuicida&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __destruct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Destruindo &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClasseSuicida<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Aê galera&#8230; Eu aqui comentei algo sobre a orientação a objeto. É claro que abrange muito mais coisas mas aqui eu citei o básico e o que vocês tem que aprender para começar a mexer com isso.</p>
<p>Comentem aê e postem dúvidas! Abraços</p>
]]></content:encoded>
			<wfw:commentRss>http://felipetonello.com/blog/2006/05/15/php-entendendo-o-php5/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
	</channel>
</rss>
