<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comentários sobre: Kohana PHP: Boas práticas de desenvolvimento</title>
	<atom:link href="http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/feed" rel="self" type="application/rss+xml" />
	<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento</link>
	<description>— coding for great good</description>
	<lastBuildDate>Mon, 08 Mar 2010 01:02:53 -0300</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Por: Marcelo Rodrigo &#187; Boas práticas desenvolvendo em Kohana</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-621</link>
		<dc:creator>Marcelo Rodrigo &#187; Boas práticas desenvolvendo em Kohana</dc:creator>
		<pubDate>Mon, 14 Sep 2009 15:19:58 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-621</guid>
		<description>[...] sempre procurando aproveitar o melhor do melhor.Caio Ariade escreveu um ótimo artigo falando do Kohana PHP: Boas práticas de desenvolvimento  var addthis_pub = &#039;marcelorodrigo&#039;; var addthis_language = &#039;pt&#039;;var addthis_options = &#039;email, [...]</description>
		<content:encoded><![CDATA[<p>[...] sempre procurando aproveitar o melhor do melhor.Caio Ariade escreveu um ótimo artigo falando do Kohana PHP: Boas práticas de desenvolvimento  var addthis_pub = &#8216;marcelorodrigo&#8217;; var addthis_language = &#8216;pt&#8217;;var addthis_options = &#8216;email, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Caio Ariede</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-599</link>
		<dc:creator>Caio Ariede</dc:creator>
		<pubDate>Mon, 06 Jul 2009 12:26:35 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-599</guid>
		<description>Fábio,

Na verdade não se trata de um &quot;singleton&quot; meia-boca.

Algumas bibliotecas do Kohana tem configurações próprias, que são armazenadas em suas instâncias, portanto, não pode simplesmente ignorar novas instâncias.

Um exemplo pode ser a biblioteca Pagination:

&lt;pre lang=&quot;php&quot;&gt;$x = Pagination::factory(array(&#039;style&#039; =&gt; &#039;classic&#039;));
$y = Pagination::factory(array(&#039;style&#039; =&gt; &#039;digg&#039;));&lt;/pre&gt;

O caso da Session, é um caso muito específico, pois todos sabemos que não há utilidade em instanciar duas classes de sessão, sendo que elas conterão sempre os mesmos dados.

É algo ainda em discussão, se a biblioteca Session deverá ser instanciada somente uma vez, ou se seguirá o padrão das outras bibliotecas, podendo ser instanciada várias vezes (somente para seguir um padrão).

Nas novas versões do Kohana, o método __construct será protegido (não privado), forçando todos a utilizarem o padrão Factory:

&lt;pre lang=&quot;php&quot;&gt;$session = Session::factory();&lt;/pre&gt;

Talvez, na biblioteca Session em específico, o método factory() faça uma chamada por instance(), ao invés de new Session. É uma questão ainda a ser decidida.</description>
		<content:encoded><![CDATA[<p>Fábio,</p>
<p>Na verdade não se trata de um &#8220;singleton&#8221; meia-boca.</p>
<p>Algumas bibliotecas do Kohana tem configurações próprias, que são armazenadas em suas instâncias, portanto, não pode simplesmente ignorar novas instâncias.</p>
<p>Um exemplo pode ser a biblioteca Pagination:</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$x</span> <span style="color: #339933;">=</span> Pagination<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'style'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'classic'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$y</span> <span style="color: #339933;">=</span> Pagination<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'style'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'digg'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>O caso da Session, é um caso muito específico, pois todos sabemos que não há utilidade em instanciar duas classes de sessão, sendo que elas conterão sempre os mesmos dados.</p>
<p>É algo ainda em discussão, se a biblioteca Session deverá ser instanciada somente uma vez, ou se seguirá o padrão das outras bibliotecas, podendo ser instanciada várias vezes (somente para seguir um padrão).</p>
<p>Nas novas versões do Kohana, o método __construct será protegido (não privado), forçando todos a utilizarem o padrão Factory:</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$session</span> <span style="color: #339933;">=</span> Session<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Talvez, na biblioteca Session em específico, o método factory() faça uma chamada por instance(), ao invés de new Session. É uma questão ainda a ser decidida.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Fábio T. da Costa</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-597</link>
		<dc:creator>Fábio T. da Costa</dc:creator>
		<pubDate>Thu, 25 Jun 2009 14:55:44 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-597</guid>
		<description>Mas qual a vantagem de usar este &quot;singleton meia-boca&quot; em vez de um com o construtor privado?</description>
		<content:encoded><![CDATA[<p>Mas qual a vantagem de usar este &#8220;singleton meia-boca&#8221; em vez de um com o construtor privado?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Araujo</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-519</link>
		<dc:creator>Marcelo Araujo</dc:creator>
		<pubDate>Wed, 20 May 2009 19:22:19 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-519</guid>
		<description>Isso ai, correto! É um singleton meia-boca! :D</description>
		<content:encoded><![CDATA[<p>Isso ai, correto! É um singleton meia-boca! :D</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Caio Ariede</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-518</link>
		<dc:creator>Caio Ariede</dc:creator>
		<pubDate>Wed, 20 May 2009 17:12:05 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-518</guid>
		<description>Na verdade, essa falsa impressão ocorre devido a biblioteca Session, assim como as outras bibliotecas do Kohana, utilizarem certos atributos como estáticos. Ou seja, são objetos diferentes porém contendo alguns atributos estáticos, acessíveis por qualquer um destes objetos.

&lt;pre lang=&quot;php&quot;&gt;
$session_a = new Session;
$session_a-&gt;foo = &#039;bar&#039;;
var_dump(empty($session_a-&gt;foo));
$session_b = new Session;
var_dump(empty($session_b-&gt;foo));

// bool(false) bool(true) 
&lt;/pre&gt;

Como pode-se ver, são objetos diferentes, o que, de qualquer forma, acaba &quot;fugindo&quot; do padrão Singleton.</description>
		<content:encoded><![CDATA[<p>Na verdade, essa falsa impressão ocorre devido a biblioteca Session, assim como as outras bibliotecas do Kohana, utilizarem certos atributos como estáticos. Ou seja, são objetos diferentes porém contendo alguns atributos estáticos, acessíveis por qualquer um destes objetos.</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$session_a</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Session<span style="color: #339933;">;</span><br />
<span style="color: #000088;">$session_a</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">foo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'bar'</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/var_dump"><span style="color: #990000;">var_dump</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$session_a</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">foo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$session_b</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Session<span style="color: #339933;">;</span><br />
<a href="http://www.php.net/var_dump"><span style="color: #990000;">var_dump</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$session_b</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">foo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// bool(false) bool(true)</span></div></div>
<p>Como pode-se ver, são objetos diferentes, o que, de qualquer forma, acaba &#8220;fugindo&#8221; do padrão Singleton.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Araujo</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-517</link>
		<dc:creator>Marcelo Araujo</dc:creator>
		<pubDate>Wed, 20 May 2009 15:41:11 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-517</guid>
		<description>Caio,

Experimente criar  $this-&gt;session = new Session em um controller X e novamente chamar $this-&gt;session = new Session em um controller Y. Voce vera que o objeto é o mesmo. Ou nao?</description>
		<content:encoded><![CDATA[<p>Caio,</p>
<p>Experimente criar  $this-&gt;session = new Session em um controller X e novamente chamar $this-&gt;session = new Session em um controller Y. Voce vera que o objeto é o mesmo. Ou nao?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Rodrigo</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-516</link>
		<dc:creator>Marcelo Rodrigo</dc:creator>
		<pubDate>Wed, 20 May 2009 13:57:06 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-516</guid>
		<description>Muito bom artigo, tomei a liberdade de linkar em meu site :)
Abraço!</description>
		<content:encoded><![CDATA[<p>Muito bom artigo, tomei a liberdade de linkar em meu site :)<br />
Abraço!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Caio Ariede</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-515</link>
		<dc:creator>Caio Ariede</dc:creator>
		<pubDate>Wed, 20 May 2009 13:38:39 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-515</guid>
		<description>Bom te ver por aqui Marcelo. :D

Na verdade não, o que o construtor faz na verdade, é verificar se a instância existe, caso não exista, ele especifica que a instância foi criada, mas não evita que o novo objeto seja criado, que só não é criado quando o construtor dispara uma exceção.

Até mesmo por isso que muita gente coloca o construtor como método privado, evitando que seja chamado externamente.

&lt;pre lang=&quot;php&quot;&gt;
class Foo
{

	private static $instance;

	private __construct()
	{
	}

	public static instance()
	{
		if (empty(self::$instance))
			self::$instance = new Foo;
		return self::$instance;
	}

}
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Bom te ver por aqui Marcelo. :D</p>
<p>Na verdade não, o que o construtor faz na verdade, é verificar se a instância existe, caso não exista, ele especifica que a instância foi criada, mas não evita que o novo objeto seja criado, que só não é criado quando o construtor dispara uma exceção.</p>
<p>Até mesmo por isso que muita gente coloca o construtor como método privado, evitando que seja chamado externamente.</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Foo<br />
<span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> static <span style="color: #000088;">$instance</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static instance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$instance</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$instance</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Foo<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$instance</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></div>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Araujo</title>
		<link>http://caioariede.com/2009/kohanaphp-boas-praticas-de-desenvolvimento/comment-page-1#comment-514</link>
		<dc:creator>Marcelo Araujo</dc:creator>
		<pubDate>Wed, 20 May 2009 13:23:56 +0000</pubDate>
		<guid isPermaLink="false">http://caioariede.com/?p=453#comment-514</guid>
		<description>Caio,

Parabéns pelo post! Uma correção: o construtor da Session verifica se existe uma instância criada do objeto Session, ou seja, tanto faz vc usar new Session ou Session::instance().

http://source.kohanaphp.com/trunk/system/libraries/Session.php</description>
		<content:encoded><![CDATA[<p>Caio,</p>
<p>Parabéns pelo post! Uma correção: o construtor da Session verifica se existe uma instância criada do objeto Session, ou seja, tanto faz vc usar new Session ou Session::instance().</p>
<p><a href="http://source.kohanaphp.com/trunk/system/libraries/Session.php" rel="nofollow">http://source.kohanaphp.com/trunk/system/libraries/Session.php</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
