Search Results for "Code"

Março 3rd 2008

Integração contínua com CruiseControl + phpUnderControl

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily, leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.”

Neste post pretendo apresentar algumas ferramentas que facilitam a utilização da Integração Contínua, como prática de desenvolvimento de seus projetos.

CruiseControl

O CruiseControl é uma ferramenta que automatiza o processo de build, provendo várias tarefas que facilitam o controle sobre o código, incluindo uma interface para visualizar os detalhes sobre cada build.

phpUnderControl

O phpUnderControl é um plugin para o CruiseControl que facilita a integração de algumas ferramentas voltadas para projetos PHP: phpDocumentor, PHPUnit, PHP_CodeSniffer.

Continue Reading »

7 Comments »

Dezembro 17th 2007

Integrando PHPUnit com banco de dados

A partir da versão 3.2.0 o PHPUnit conta com uma extensão para fazer testes utilizando banco de dados, na pratica isto já era possível, mas o PHPUnit não contava com nenhum tipo de ferramenta para abstrair tarefas como: inserir dados para fazer testes, deletar dados apos as rotinas de testes, etc.

O fato e que esta extensão do PHPUnit é uma forma elegante de controlar a dependência entre o banco e sua aplicação.

Obs.: Aos que ainda não estão familiarizados com a utilização do PHPUnit recomendo a leitura destes posts:
http://blog.diegotremper.com/archives/15
http://blog.diegotremper.com/archives/97

Exemplo:
Vamos supor que você queira testar um método de sua aplicação que carregue um determinado registro do banco de dados. A questão é: como garantir que quando eu estiver rodando meu teste, o registro que eu vou tentar carregar para afirmar que meu método esta funcionando corretamente, estará lá?

Como você já deve ter pensado, primeiro teremos que inserir o registro na base de dados antes de executarmos nosso teste, e depois da execução, teremos que deletar o registro para que a base de dados não fique com registros inválidos.

Continue Reading »

4 Comments »

Dezembro 5th 2007

array X ArrayIterator == cópia X referência

A questão é a seguinte, imagine que você precise imprimmir todos os elementos de um array, qual a solução para isso? use um foreach, óbvio.

Agora vamo imaginar que dentro deste foreach onde você esta imprimindo os elementos de seu array, tenha alguma lógica que pode adicionar ou não mais elementos ao array que você esta iterando no momento. Ex.:

PHP:
  1. $a = array('PHP', 'Java', 'Ruby');
  2.  
  3. foreach ($a as $value) {
  4.   if ($value == 'PHP') {
  5.     $a[] = 'PHP-GTK';
  6.   }
  7.  
  8.   echo $value . "\r\n";
  9. }

Reparem que no exemplo acima a saida final seria:

PHP
Java
Ruby

E o PHP-GTK por que não imprimiu?
Isto acontece porque o PHP faz com que o foreach trabalhe com um 'cópia' do array que você passou como parametro assim quando você adiciona um elemento para o seus array, não irá influenciar na cópia que esta sendo usada pelo foreach.

Esta situação é facilmente resolvida se você utilizar um objeto que implemente a interface Iterator, como o ArrayIterator por exemplo.

Se você passar um objeto do tipo Iterator como parametro para o comando foreach ele não irá criar uma cópia de seu objeto, irá utilizar a referência. Desta maneira é possível garantir que todos os elementos de seu array serão iterados. Ex.:

PHP:
  1. $a = array('PHP', 'Java', 'Ruby');
  2. $a = new ArrayIterator($a);
  3.  
  4. foreach ($a as $value) {
  5.   if ($value == 'PHP') {
  6.     $a[] = 'PHP-GTK';
  7.   }
  8.  
  9.   echo $value . "\r\n";
  10. }

Espero que a informação tenha sido util, infelizmente na documentação do
PHP este tipo de situação não esta "bem documentada". :P

Abraço a todos.

2 Comments »

Outubro 22nd 2007

[Testado] Zend Studio for eclipse

Durante aproximadamente duas semanas trabalhei utilizando o novo Zend Studio for eclipse, e neste post irei dar algumas ficas e falar sobre as novidades da IDE.

Não irei abordar todas funcionalidades da IDE neste post, isso seria inviável devido a todas as funcionalidades já herdadas do eclipse, então darei um foco exclusivo a algumas das funcionalidades implementadas pela Zend para o desenvolvimento PHP.

Continue Reading »

Páginas: 1 2 3

2 Comments »

Outubro 11th 2007

Novo Zend Studio for Eclipse

A Zend anunciou recentemente o lançamento da versão beta de sua nova IDE de desenvolvimento Zend Studio for Eclipse, cujo o nome não definitivo é "Neon". Baseada no eclipse a nova IDE irá substituir a IDE oficial da Zend o Zend Studio. Basicamente a IDE une as funcionalidades do Zend Studio com algumas funcionalidades já existentes no Eclipse, abaixo listo algumas funcionalidades que a IDE taz:

* Wizard para testes unitários utilizando PHPUnit;
* Wizard para gerar documentação de código utilizando PHPDoc;
* Debug local e no servidor;
* Profile;
* Integração com Zend Framework;
* Connectividade com os bancos de dados IBM DB2 & DB2 Express-C, MySQL, Oracle, Microsoft SQL Server, PostgreSQL, and SQLite;
* Transferencias de arquivos através de FTP e SFTP;
* Integração com Zend Platform;
* Code Coverage;
* Integração CVS/SVN;
e outros vários, incluindo o próprio Eclipse :). Ficou devendo uma integração com o Phing, mas ai é pedir demais para versão beta..hehe.

Estou testando a IDE já, mais adiante escreverei um artigo explicando melhor as funcionalidades.

[]'s

8 Comments »

Agosto 7th 2007

Zend Framework - Não estenda. Plugue!

Introdução

A arquitetura de controllers do Zend Framework inclui um sistema plugin que permite que o código do usuário seja chamado quando determinados eventos ocorrem durante o ciclo de vida do processo de roteamento dos controllers. Para cada evento do front controller são chamados os métodos dos plugins registrados a ele.

Os métodos chamados pelo front controller estão definidos na classe abstrata Zend_Controller_Plugin_Abstract, a qual, as classes para plugins do usuário devem estender.

Continue Reading »

Páginas: 1 2 3 4

10 Comments »

Agosto 1st 2007

Depurar webservices com Zend Studio + PHP Soap

O Zend Studio disponibiliza uma ótima forma para depurar códigos através do browser, o problema é quando utilizamos webservices com as classes SoapClient e SoapServer.

Quando iniciamos uma depuração através do browser utilizando o Zend Studio Tool Bar são postados alguns cookies para o webserver que devidamente configurado inicia a depuração do script php, o problema é que quando chamamos um método remoto com o SoapClient os cookies não são replicados automáticamente para o webservice.

Continue Reading »

No Comments yet »

Julho 28th 2007

Zend Framework - MVC na linha de comando

Neste post apresentarei um exemplo que criei para utilizar as funcionalidades do MVC do Zend Framework com uma interface na linha de comando, basicamente o que fiz foi integrar o módulo Zend_Console com o módulo Zend_Controller, de maneira que fosse possível mapear as opções vindas da variável $_SERVER['argv'] para as actions, para isso foi preciso estender as classes Zend_Controller_Request_Abstract e Zend_Controller_Router_Rewrite.

Arquivos do Exemplo

Continue Reading »

Páginas: 1 2 3

No Comments yet »

Julho 26th 2007

Criando Listener para o PHPUnit

o PHPUnit pode ser estendido de várias maneiras, vou apresentar neste post uma forma simples de manipular os resultados dos testes, criando um listener para escutar os resultados obtidos através da execução dos testes unitários.

Você não necessita necessariamente escrever uma subclasse da classe PHPUnit_Framework_TestResult a fim customizar seus resultados de execução. Na maioria das vezes, bastará implementar a interface PHPUnit_Framework_TestListener e uni-lo ao objeto de PHPUnit_Framework_TestResult, antes de executar os testes.

Continue Reading »

Páginas: 1 2 3

No Comments yet »

Julho 16th 2007

Crud com Zend Framework 1.0.0

Lançado no dia 02 de julho de 2007 e desenvolvido em PHP, o Zend Framework 1.0.0 tem como objetivo fornecer uma API de desenvolvimento poderosa e de fácil uso, provendo alta qualidade para desenvolvimento de aplicações PHP.

Criei um pequeno caso de uso do Zend Framework, utilizando MVC (Model View Controller) e alguns módulos disponíveis no framework como: Zend_Controller, Zend_Config, Zend_View, etc.

Para obter os arquivos do caso de uso clique aki.

Continue Reading »

4 Comments »

Next »