<?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>Wed, 18 Aug 2010 14:30:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</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>
<pre lang="php">$x = Pagination::factory(array('style' => 'classic'));
$y = Pagination::factory(array('style' => 'digg'));</pre>
<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>
<pre lang="php">$session = Session::factory();</pre>
<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>
<pre lang="php">
$session_a = new Session;
$session_a->foo = 'bar';
var_dump(empty($session_a->foo));
$session_b = new Session;
var_dump(empty($session_b->foo));

// bool(false) bool(true)
</pre>
<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>
<pre lang="php">
class Foo
{

	private static $instance;

	private __construct()
	{
	}

	public static instance()
	{
		if (empty(self::$instance))
			self::$instance = new Foo;
		return self::$instance;
	}

}
</pre>
]]></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>
