<?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>marcuscavalcanti.net &#187; PHP</title>
	<atom:link href="http://www.marcuscavalcanti.net/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcuscavalcanti.net/blog</link>
	<description>Software, tecnologia e etc.</description>
	<lastBuildDate>Sun, 22 Jan 2012 21:18:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Primeiras impressões sobre o Yii framework</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/04/09/primeiras-impressoes-sobre-o-yii-framework/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/04/09/primeiras-impressoes-sobre-o-yii-framework/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 05:33:49 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Yii]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=875</guid>
		<description><![CDATA[Seguindo a febre de frameworks, que borbulham a todo momento, em todas as linguagens, de todos os gostos, surge então mais um! Na verdade, se fosse mais um eu nem me daria ao trabalho de estar escrevendo sobre algo que seria irrelevante, mas esse tal de Yii Framework ao que me parece veio para ficar, [...]]]></description>
			<content:encoded><![CDATA[<p>Seguindo a febre de <em>frameworks</em>, que borbulham a todo momento, em todas as linguagens, de todos os gostos, surge então mais um! Na verdade, se fosse mais um eu nem me daria ao trabalho de estar escrevendo sobre algo que seria irrelevante, mas esse tal de <a href="http://www.yiiframework.com/" target="_blank" style="text-decoration: underline">Yii Framework</a> ao que me parece veio para ficar, mesmo tendo pouquíssimo contato com ele, acho que dá para afirmar isso com alguma certeza.</p>
<h3>O que é o Yii Framework?</h3>
<p>O Yii é um <em>framework</em> que está sendo mantido e desenvolvido pelo <a href="http://qiangxue.com/" target="_blank" style="text-decoration: underline">criador</a> do <em>framework</em> <a href="http://www.xisc.com/" target="_blank" style="text-decoration: underline">Prado</a>, que é um famoso <em>framework</em> <a href="http://www.php.net" target="_blank" style="text-decoration: underline">PHP</a> baseado no conceito de <em><a href="http://en.wikipedia.org/wiki/Event-driven_programming" target="_blank" style="text-decoration: underline">event-driven programming</a></em>, que a grosso modo seria um <em>framework</em> em que o seu fluxo é determinado por eventos.</p>
<h3>Comparação com outros <em>frameworks</em></h3>
<p>Quando digo que o Yii não é mais um <em>framework</em> <a href="http://pt.wikipedia.org/wiki/MVC" target="_blank" style="text-decoration: underline">MVC</a>, digo, pois ele parece ser muito mais maduro, estável, flexível e bem projetado que o restante, além do que ele é focado em performance, ou seja, foi desenvolvido pensando em aplicações Web &#8220;parrudas&#8221; e que precisam ser <a href="http://pt.wikipedia.org/wiki/Escalabilidade" target="_blank" style="text-decoration: underline">escaláveis</a>.</p>
<p>Tenho alguma experiência com <em>frameworks</em> em PHP, já desenvolvi projetos que estão em produção usando o <a href="http://kohanaphp.com/" target="_blank" style="text-decoration: underline">Kohana</a>, <a href="http://www.codeigniter.com" target="_blank" style="text-decoration: underline">Code Igniter</a> e o <a href="http://www.drupal.org" target="_blank" style="text-decoration: underline">Drupal</a> (também é um <em>framework</em>!), além de já ter desenvolvido aplicações <em>dummy</em> usando o <a href="http://framework.zend.com/" target="_blank" style="text-decoration: underline">Zend Framework</a>, <a href="http://www.akelos.org/" target="_blank" style="text-decoration: underline">Akelos</a> e <a href="http://cakephp.org/" target="_blank" style="text-decoration: underline">Cake</a>, e por isso posso afirmar que o Yii é diferenciado. Por exemplo, o Code Igniter eu gosto bastante, mas ele é muito <em>lightweight</em> e não é PHP 5, o Zend Framework é sólido, mas na verdade é mais um conjunto de componentes do que um <em>framework</em>, o Kohana, que é um <em><a href="http://pt.wikipedia.org/wiki/Fork" target="_blank" style="text-decoration: underline">fork</a></em> do CI, é interessante, mas ainda precisa comer muito feijão com arroz, o Cake sinceramente não me agrada e o Akelos é bem interessante, mas tem pouca comunidade e documentação. Nenhum desses, com exceção do ZF, me parece ser um projeto a longo prazo como o Yii.</p>
<p>O Yii é baseado em várias idéias do queridinho Ruby on Rails, e assim como o RoR possui geradores de código para gerar: <em>controllers</em>, <em>models</em>, <em>scaffoldings</em> apenas usando linha de comando. Ainda não me acostumei muito com essas idéias de geradores de código hehe, sou um pouco conservador em relação a isso, e muita &#8220;mágica&#8221; as vezes me preocupa, mas de qualquer maneira esses geradores trazem uma agilidade absurda e no final das contas se houver um equilíbrio entre agilidade e controle do que está sendo gerado, acho que vale muito a pena.</p>
<h3>Principais atrativos</h3>
<p>Além de ser bem projetado, com uma arquitetura bem definida, uso de design patterns e facilidade de ser extendido, o que me atraiu no Yii foi algumas <em>features</em> mais avançadas e que outros <em>frameworks</em> não possuem nativamente, como: sistema de <em>cache</em> em camadas (usando <a href="http://www.danga.com/memcached/" target="_blank" style="text-decoration: underline">memcached</a> e <a href="http://br.php.net/apc" target="_blank" style="text-decoration: underline">apc</a>), suporte a web services (WS-*), <a href="http://en.wikipedia.org/wiki/Internationalization_and_localization" target="_blank" style="text-decoration: underline">internacionalização</a> de verdade, sistema de autenticação/permissão usando <a href="http://henriquebastos.net/2008/05/30/implemente-controles-de-acesso-eficientes-com-rbac/" target="_blank" style="text-decoration: underline">RBAC</a>, integração nativa com <a href="http://jquery.com" target="_blank" style="text-decoration: underline">jQuery</a>, acesso a dados usando DAO, ORM + ActiveRecord (com <em><a href="http://martinfowler.com/eaaCatalog/lazyLoad.html" target="_blank" style="text-decoration: underline">lazy loading</a></em>, inclusive), etc.</p>
<p>Outro ponto que me convenceu foi a <a href="http://www.yiiframework.com/doc/" target="_blank" style="text-decoration: underline">documentação</a>, que é bem completa, clara e objetiva, possuindo manuais, tutorias, screencasts, fóruns e API.</p>
<p>O <em>framework</em> também é todo modularizado, permitindo que componentes sejam desenvolvidos para serem totalmente desacoplados da aplicação.</p>
<h3>Aprendizado</h3>
<p>A curva de aprendizado do Yii é muito mais alta que a do CI ou do Kohana, por exemplo, apesar de no site do <em>framework</em> dizer o contrário. Mesmo com o <em>framework</em> tendo uma documentação extensa, <em>skeletons</em> para construção da aplicação e geradores de código, entender como funciona o <em>framework</em> e sua arquitetura não é tão simples como os outros <em>frameworks</em> citados anteriormente, mas isso não quer dizer que o código seja ilegível, ou difícil de entender, muito pelo contrário, como a tendência dos <em>frameworks</em> hoje em dia é descomplicar e humanizar, acredito que o Yii tenho seguido essa linha, apenas acho que para um desenvolvedor inexperiente será mais árduo aprender o Yii do que o CI.</p>
<h3>O que pode melhorar</h3>
<p>Como é um <em>framework</em> recente, mesmo tendo muitas funcionalidades mais avançadas, algumas outras ainda senti falta. Por exemplo, o <em>framework</em> ainda não tem um suporte para testes, seja <a href="http://dannorth.net/introducing-bdd" target="_blank" style="text-decoration: underline">BDD</a> ou <a href="http://www.agiledata.org/essays/tdd.html" target="_blank" style="text-decoration: underline">TDD</a> e isso hoje em dia é inaceitável. O RoR, por exemplo, é um <em>framework</em> que tem a parte de testes muito forte dentro do <em>framework</em> e toda sua comunidade também é assim, em PHP isso é um pouco diferente, portanto seria interessante que o Yii começasse a fornecer mecanismos para realização de testes, porém nada impede que se integre o <a href="http://www.simpletest.org/" target="_blank" style="text-decoration: underline">SimpleTest</a> ou <a href="http://www.phpunit.de/" target="_blank" style="text-decoration: underline">PHPUnit</a> com o Yii.</p>
<p>Outra coisa que senti falta também foi suporte para serviços <a href="http://www.xfront.com/REST-Web-Services.html" target="_blank" style="text-decoration: underline">REST</a>, o <em>framework</em> apesar de oferecer suporte a <em>Webservices</em>, só oferece suporte para Webservices no padrão SOAP/WSDL, REST seria muito interessante, até mesmo porque um dos pilares do <em>framework</em> é performance.</p>
<h3>Conclusão</h3>
<p>Estou animado com esse novo <em>framework</em>, apesar de ter pouco contato, senti seriedade no trabalho, mas só posso afirmar tudo que eu disse depois que eu tiver uma experiência real com o <em>framework</em>.</p>
<p>No momento estou participando de um <em>job</em> novo, em que estou definindo o que será usado como <em>framework</em> web, na verdade, não gosto e não costumo usar tecnologias que não tenho experiência em projetos que estou a frente, mas como esse projeto não é crítico e nem complexo, possa ser que eu use o Yii para ter uma opinião formada sobre o mesmo, e caso eu opte realmente por essa opção, irei comunicando o progresso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/04/09/primeiras-impressoes-sobre-o-yii-framework/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Convertendo objeto em array com PHP</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/01/21/convertendo-objeto-em-array-com-php/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/01/21/convertendo-objeto-em-array-com-php/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 02:10:44 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=181</guid>
		<description><![CDATA[Mais do que nunca têm-se trabalhado com objetos em PHP, algumas vezes de forma certa, outras vezes de forma errada, mas isso não vem ao caso, a questão é que com a explosão dos frameworks MVC e o uso da camada modelo como representante dos dados de uma aplicação, tornou-se muito comum enviar objetos ao [...]]]></description>
			<content:encoded><![CDATA[<p>Mais do que nunca têm-se trabalhado com objetos em PHP, algumas vezes de forma certa, outras vezes de forma errada, mas isso não vem ao caso, a questão é que com a explosão dos frameworks MVC e o uso da camada modelo como representante dos dados de uma aplicação, tornou-se muito comum enviar objetos ao invés de arrays para nossa camada de visualização. Até aí nenhum problema, o problema surge quando precisamos trabalhar em cima desses objetos e realizar ordenações, filtrar elementos repetidos, extrair elementos específicos, dentre outras necessidades. Apesar da <a href="http://www.php.net/spl" style="text-decoration: underline;" target="_blank">SPL</a> ter chegado, o PHP ainda não tem um framework como o <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html" style="text-decoration: underline;" target="_blank">Collections Framework</a> do Java para realizar esse trabalho, então  muitas vezes torna-se árduo e nem um pouco prazeroso fazer certas operações. Entretanto o PHP possui boas funções para manipular arrays e em muitos casos torna-se vantajoso transformar objetos em arrays, pois assim é possível fazer o uso dessas funções.</p>
<p>Pensando nas situações descritas acima e também baseado em necessidades reais do meu dia-a-dia, criei uma função muito simples que converte um objeto em array.</p>
<p>Imagine um objeto com a seguinte estrutura:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1">TableEditor Object
<span class="br0">&#40;</span>
    <span class="br0">&#91;</span>db<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> Resource id <span class="co2">#82
</span>    <span class="br0">&#91;</span>pk<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> id_idioma_afiliado
    <span class="br0">&#91;</span>table<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> idioma_afiliado
    <span class="br0">&#91;</span>fields<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
        <span class="br0">&#40;</span>
            <span class="br0">&#91;</span>id_idioma_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> id_idioma_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>afiliado_id<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> afiliado_id
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>idioma_id<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> idioma_id
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_descricao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_descricao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_transfer<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_transfer
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_informacao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_informacao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_apresentacao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_apresentacao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
        <span class="br0">&#41;</span>
<span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Se quiséssemos ordená-lo, por exemplo, apesar de não ser difícil, demandaria tempo.<br />
Mas e se ao invés de um objeto, tivéssemos um array? Algo como:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="kw3">Array</span>
<span class="br0">&#40;</span>
    <span class="br0">&#91;</span>db<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> Resource id <span class="co2">#82
</span>    <span class="br0">&#91;</span>pk<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> id_idioma_afiliado
    <span class="br0">&#91;</span>table<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> idioma_afiliado
    <span class="br0">&#91;</span>fields<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
        <span class="br0">&#40;</span>
            <span class="br0">&#91;</span>id_idioma_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> id_idioma_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>afiliado_id<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> afiliado_id
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>idioma_id<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> idioma_id
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> text
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_descricao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_descricao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_transfer<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_transfer
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_informacao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_informacao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
            <span class="br0">&#91;</span>tx_apresentacao_afiliado<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> <span class="kw3">Array</span>
                <span class="br0">&#40;</span>
                    <span class="br0">&#91;</span>display<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> tx_apresentacao_afiliado
                    <span class="br0">&#91;</span>input<span class="br0">&#93;</span> <span class="sy0">=&gt;</span> textarea
                    <span class="br0">&#91;</span>values<span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                    <span class="br0">&#91;</span><span class="kw1">default</span><span class="br0">&#93;</span> <span class="sy0">=&gt;</span>
                <span class="br0">&#41;</span>
&nbsp;
        <span class="br0">&#41;</span>
<span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Ficaria muito mais fácil, não?!</p>
<p>Para obter esse resultado, basta jogar a funçãozinha abaixo como um helper no seu projeto ou criar um método estático em sua classe utilitária. Segue:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><ol><li class="li1"><pre class="de1"><span class="kw2">function</span> objectToArray <span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">	<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">1</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		<span class="re0">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">for</span> <span class="br0">&#40;</span> <span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">			<span class="re0">$arr</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">get_object_vars</span><span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">		<span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">    	        <span class="kw1">return</span> <span class="re0">$arr</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></pre></li><li class="li1"><pre class="de1">		<span class="kw1">return</span> <span class="kw3">get_object_vars</span><span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">	<span class="br0">&#125;</span></pre></li><li class="li1"><pre class="de1"><span class="br0">&#125;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Para utilizar, é simples:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><ol><li class="li1"><pre class="de1"><span class="co1">// $object é o seu objeto</span></pre></li><li class="li1"><pre class="de1"><span class="kw3">print_r</span><span class="br0">&#40;</span>objectToArray<span class="br0">&#40;</span><span class="re0">$object</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>A boa notícia é que esta função preserva toda hierarquia dos seus objetos criando dimensões dentro desse array, no caso uma <a href="http://pt.wikipedia.org/wiki/Matriz_(matem%C3%A1tica)"  style="text-decoration: underline;" target="_blank">matriz</a>. O exemplo que eu usei foi bem simples, apenas para poder ilustrar o uso da função, mas caso tivéssemos um objeto mais &#8220;complexo&#8221; toda sua estrutura seria mantida sem problemas.</p>
<p>Uma dica bem simples, mas espero que seja de grande utilidade! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/01/21/convertendo-objeto-em-array-com-php/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

