Archive for category Desenvovimento em Geral

Tutorial Series: Orientação a objetos utilizando PHP #2

Ver Tutorial Series: Orientação a objetos utilizando PHP
Ver Tutorial Series: Introdução a orientação a objetos

Implementando uma classe e criando objetos a partir dela

A implementação de uma classe só tem sentido se, no contexto do desenvolvimento de um sistema orientado a objeto, for identificada a necessidade de existência de um conjunto de objetos com atributos e comportamentos em comum. A partir do momento que esses objetos com atributos e comportamento em comum são identificados, já existe a necessidade de criar a estrutura (classe) que os defina.

Neste módulo, você irá aprender como implementar na linguagem PHP uma classe e como criar objetos (instâncias) a partir dela. Pode-se falar também no termo “instanciar objetos” a partir de uma classe.

Não iremos neste momento demonstrar o processo de identificação de objetos num dado problema, isso será feito nas seções seguintes.

Veremos agora, como implementar a classe Cliente do Sistema de Conta Corrente citado anteriormente e como criar objetos cliente a partir dela.

A visão prática desses dois conceitos (Classe e Objeto) facilitará o entendimento dos demais conceitos.

Implementação da Classe Cliente

A seguir será apresentada uma implementação resumida e mais didática da classe Cliente.

  1. class Cliente {
  2.  
  3.  private $nome;
  4.  private $endereco;
  5.  private $cpf;
  6.  
  7.  function __construct() {
  8.   $this->nome = "";
  9.   $this->endereco = "";
  10.   $this->cpf = "";
  11.  }
  12.  
  13.  public function setNome($nome) {
  14.   $this->nome = $nome;
  15.  }
  16.  
  17.  public function setEndereco($endereco) {
  18.   $this->endereco = $endereco;
  19.  }
  20.  
  21.  public function setCpf($cpf) {
  22.   $this->cpf = $cpf;
  23.  }
  24.  
  25.  public function getNome() {
  26.   return $this->nome;
  27.  }
  28.  
  29.  public function getEndereco() {
  30.   return $this->endereco;
  31.  }
  32.  
  33.  public function getCpf() {
  34.   return $this->cpf;
  35.  }
  36.  
  37. }

Análise da classe Cliente

Para se nomear classes, existem alguns requisitos que devem ser observados. Classes são nomeadas com um substantivo no singular.

- O nome de uma classe deve iniciar com a primeira letra maiúscula;

- Não devem ser utilizados símbolos de sublinhado (“_”)

- Nomes compostos por múltiplas palavras são organizados com todas as palavras juntas,  onde a primeira letra de cada uma fica maiúscula.

- Exemplos: Aluno, Professor, FolhaPagamento.

Após a definição inicial da classe, temos a definição dos seus atributos. Na definição dos atributos deve-se utilizar a palavra private (veremos mais adiante o significado dessa palavra) seguido do nome do atributo. No caso da classe Cliente, temos os atributos nome, endereço e cpf.

- Normalmente, atributos são colocados no início da definição da classe, depois do primeiro { .

- Devem começar com letra minúscula.

Depois da definição do nome da classe e dos atributos da classe, segue-se a definição dos comportamentos, no contexto da implementação, conhecidos como métodos. Por enquanto, os comportamentos ou métodos definidos para a classe Cliente são simples. Na medida em que formos avançando, mais comportamentos ou métodos poderão ser implementados. No momento, implementamos sete métodos: __construct(), setNome(), setEndereco(), setCpf(), getNome(), getEndereco() e getCpf().

O primeiro método implementado se chama __construct(). Este é um método construtor. Um método construtor no PHP (em sua versão 5, pois na versão 4 os métodos construtores tinham o mesmo nome da classe) deve ter sempre este nome e não devem retornar nada, apenas realizar as tarefas necessárias para a utilização do objeto no momento em que ele é criado (instanciado). Vamos saber mais sobre métodos construtores no momento da explicação da criação de objetos. Saiba por enquanto que é importante (não obrigatório) que cada classe tenha um método construtor implementado.

O que se pode programar dentro de um método construtor?

Qualquer coisa que se quer que aconteça quando um objeto do tipo Cliente, no caso, for criado, porque o código que está dentro de um método  construtor é executado sempre que um objeto desse tipo for criado. Porém, normalmente se programa para que os atributos do objeto sejam inicializados. No caso do nosso método construtor, os atributos da classe foram inicializados com uma string vazia (“”).

Abaixo do método construtor estão os métodos “setters” e “getters”. Estes métodos são geralmente utilizados com a nomenclatura neste padrão (setNomeDoAtributo() e getNomeDoAtributo()) definem os valores dos atributos da classe e “informam” estes valores. Os métodos set definem o valor que será definido para o atributo da classe e o método get retorna o valor que foi definido anteriormente pelo método set ou definido no construtor da classe.

Observe que os métodos gets utilizam a palavra “return”, que (obviamente) retorna algum valor caso seja a intenção do método.

Criar objetos a partir da classe Cliente

Depois que a classe Cliente for implementada, ela está pronta para ser “usada”, ou seja, é possível criar objetos do tipo Cliente a partir dela.

A explicação de criar um objeto é similar à criação (declaração) de uma variável de memória. Quando declaramos uma variável de memória também estamos reservando espaço na memória para armazenar algum valor. Essa variável de memória deve ter um nome que a identifica. O mesmo acontece com a criação de um objeto. Ao criar um objeto, precisamos dar um nome (identificação) para ele e, nesse espaço de memória que estamos declarando, serão armazenados os valores correspondentes aos atributos definidos na (classe) desse objeto.

Essa explicação para criação de objeto é simples e será utilizada no momento para facilitar seu entendimento. Posteriormente, essa explicação será refinada.

  1. $c = new Cliente();

Após a execução dessa linha, um objeto, ou seja, uma área de memória é alocada.. Note cuja a sintaxe é igual a definida acima para criação de objetos. Sempre que um objeto é criado, o método construtor definido na classe desse objeto é chamado (invocado) e, tudo o que está programado nesse método, é executado.

O que foi programado no método construtor da classe Cliente?

A inicialização de todos os atributos do objeto Cliente, portanto, ao criar o objeto cliente, todos os seus atributos já estarão inicializados. A figura abaixo ilustra de maneira simples o objeto alocado na memória e seus atributos inicializados:

O código abaixo demonstra o uso da classe cliente:

  1. $c = new Cliente();
  2.  
  3. $c->setNome(“Thiago”);
  4. $c->setCpf(000.000.000-00);
  5. $c->setEndereco(“Minha Casa”);
  6.  
  7. $nome = $c->getNome();
  8. $cpf = $c->getCpf();
  9. $endereco = $c->getEndereco();

Inicialmente, instanciamos um objeto do tipo Cliente chamado $c. Neste momento, o valor dos atributos ainda são “” (string vazia), conforme definido no construtor. Após a execução dos métodos setters, os valores dos atributos são alterados para os valores definidos em cada um. Depois dos métodos setters temos os métodos getters, que estão armazenando nas variáveis $nome, $cpf e $endereco os valores dos atributos do objeto que são retornados quando utilizamos os métodos getters.

A figura abaixo ilustra de o objeto alocado na memória após a execução do código acima:

Dúvidas? Sintam-se a vontade para perguntar… Um abraço e até a próxima!

, ,

No Comments

Tutorial Series: Orientação a objetos utilizando PHP #1

Ver Tutorial Series: Orientação a objetos utilizando PHP

Introdução a orientação a objetos

Um pouco de história

O conceito de programação orientada a objeto não é algo novo. No final da década de 60, a linguagem Simula67, desenvolvida na Noruega, introduzia conceitos hoje encontrados nas linguagens orientadas a objetos. Em meados de 1970, o Centro de Pesquisa da Xerox (PARC) desenvolveu a linguagem Smalltalk, a primeira totalmente orientada a objetos. No início da década de 80, a AT&T lançou a Linguagem C++, uma evolução da linguagem de programação C em direção à orientação a objetos. Atualmente, um grande número de linguagens incorpora características de orientação a objeto, tais como Java, Object Pascal, Python , PHP etc.

Conceitos básicos

O paradigma de programação orientada a objeto é baseado em alguns conceitos que definem uma forma de criar programas para computadores.

A filosofia principal desse paradigma de programação é solucionar um problema (via programação) através da representação computacional dos objetos existentes nesse problema (objetos do mundo real), usando para isso os conceitos mencionados acima. Com isso, essa maneira de se desenvolver programas fica mais próxima das situações, dos problemas como eles acontecem no mundo real. Será um pouco difícil entender todas as vantagens de OO (Orientação a Objetos). Agora, portanto, vamos mencionar apenas duas:

- É mais fácil conversar com o cliente que pediu o software se falarmos com objetos que existem no mundo dele (o mundo do software fica mais perto do mundo real).

- O software feito com OO pode ser feito com maior qualidade e pode ser mais fácil de escrever e, principalmente, alterar no futuro.

O nosso mundo está repleto de objetos, sejam eles concretos ou abstratos. Qualquer tipo de objeto possui atributos (características) e comportamentos que são inerentes a esses objetos.

Exemplos de objetos CONCRETOS:

1) Caneta

Atributos de qualquer Caneta:

- Altura
- Espessura
- Cor

Nesse caso, o nosso objeto Caneta tem os seguintes dados em cada característica:

- Altura: 10 cm
- Espessura: 2 cm
- Cor: rosa

Comportamentos

- Desenhar
- Escrever
- Etc.

2) Pessoa

Atributos de qualquer Pessoa:

- Altura
- Peso
- Idade

Nesse caso, o nosso objeto Pessoa tem os seguintes dados em cada característica:

- Altura: 1,80
- Peso: 70
- Idade: 25

Comportamentos de qualquer Pessoa:

- Andar
- Sorrir
- Ler
- Etc.

Exemplos de objetos que NÃO SÃO CONCRETOS:

1) Retângulo

Atributos de qualquer retângulo:

- Base
- Altura

Nesse caso, o nosso objeto retângulo tem os seguintes dados em cada característica:

- Base: 10
- Altura: 5

Comportamentos de qualquer Retangulo

- Calcular área
- Calcular perímetro
- Etc.

2) Disciplina

Atributos de qualquer Disciplina:

- Código da disciplina
- Nome da disciplina

Nesse caso, o nosso objeto Disciplina tem os seguintes dados em cada característica:

- Código da disciplina: 1
- Nome da disciplina: Álgebra Linear

Comportamentos de qualquer Disciplina

- Listar o nome da disciplina
- Etc.

Para usar objetos na programação, primeiro precisamos distinguir entre um objeto real e a representação de um objeto. No desenvolvimento de programas, sempre trabalhamos com representações de objetos. Essa representação precisa refletir os objetos reais, ou seja, objetos existentes no problema do mundo real que queremos solucionar. Por exemplo, um sistema de conta corrente não manipula diretamente os clientes, contas e cheques (esses são os objetos reais do problema).

Em vez disso, o software deve criar representações desses objetos, com os mesmos atributos e comportamentos dos objetos do mundo real. Essa representação é chamada de ABSTRAÇÃO.

Para entender isso, vamos voltar ao exemplo do sistema de conta corrente.

No mundo real existem vários objetos Cliente, vários objetos Conta e vários objetos Agência (pode ser somente um), ou seja, muito provavelmente não existirá somente um cliente, uma conta e uma agência.

Todos os objetos cliente possuem o mesmo conjunto de atributos, por exemplo, todos os objetos cliente possuem nome e endereço, assim como todos os objetos conta possuem um número, um saldo, um histórico de transações e todos os objetos agência possui um número e um nome.

Assim como os atributos, todos os objetos de um mesmo tipo compartilham do mesmo conjunto de comportamentos, por exemplo, todos os objetos Cliente fazem depósitos e saques.

Apesar de cada objeto ter o mesmo conjunto de atributos, cada objeto possui valores próprios para cada atributo, ou seja, cada objeto é único.

Essa explicação para objetos do mundo real vale para quando trabalhamos com a representação desses objetos no contexto de desenvolvimento desse sistema (programação).

Portanto, podemos perceber que o sistema de conta corrente (programa de conta corrente) será composto de vários objetos, cada qual com um conjunto de atributos e comportamento em comum (se forem do mesmo tipo) e com valores próprios nos seus atributos. A figura abaixo ilustra os vários objetos cliente, conta e agência.

O termo instância é freqüentemente usado para descrever um objeto com valores próprios em seus atributos. Por exemplo, observe a figura acima:

- Ana é uma instância de Cliente
- 9916 é uma instância de Conta

Todo objeto deve ter:

- Estado
- Comportamento
- Identidade

1) Estado

É representado pelos valores dos atributos de um objeto em um determinado instante do tempo. O estado do objeto usualmente muda ao longo da existência do objeto.

2) Comportamento

Determina como um objeto age e reage: suas modificações de estado e interações com outros objetos.

O comportamento é determinado pelo conjunto de operações ou métodos que o objeto pode realizar. Operações ou métodos são algo que você pede para o objeto fazer, como fazer um depósito (comportamento de qualquer objeto do tipo Conta).

Fazer depósito é um comportamento de qualquer objeto do tipo Conta e não de qualquer objeto do tipo Cliente, como você deve ter pensado a princípio.

Isso acontece porque há diferenças grandes quando pensamos no comportamento de representações de objetos, ou seja, objetos do mundo do software.

Ao identificar comportamentos de objetos do mundo do software devemos levar em conta os seguintes princípios:

- Primeiro princípio: não vamos modelar todo o comportamento dos objetos. Exemplo: Clientes tomam café no mundo real, mas provavelmente não no software.

- Segundo princípio: os comportamentos freqüentemente são assumidos por objetos diferentes. Exemplo: No mundo real, quem faz um depósito? Um Cliente.

No software, quais objetos assumiriam a responsabilidade de fazer um depósito? Objetos do tipo Conta.

A primeira grande regra de programação Orientada a Objeto é a seguinte:

“Comportamentos são associados aos objetos que possuem os atributos afetados pelo comportamento”.

Um depósito afeta duas coisas, do ponto de vista de um sistema bancário:

- O saldo de uma conta.

- O histórico de transações feitas a uma conta.

Como se pode ver, o depósito afeta apenas atributos de uma Conta. Portanto, esse comportamento está associado à Conta e não ao Cliente, embora, no mundo físico, seja o Cliente que faz o depósito.

Outros comportamentos associados aos objetos do tipo Conta:

- Fazer um saque, informar seu saldo, etc.

3) Identidade

Refere-se à identificação do objeto. Como cada objeto é único, ou seja, tem seus próprios valores nos atributos, ele deve ser identificado por algum nome. Mesmo que seu estado seja idêntico ao de outro objeto ele tem identificação própria.

A identificação do objeto do tipo Agência mostrado na figura abaixo é Centro. Esse objeto poderia ter qualquer nome identificando-o.

Agora você já sabe que qualquer programa orientado a objeto deve trabalhar com representações de objetos que reflitam as características e comportamento de objetos do mundo real e já aprendeu os principais conceitos relacionados a objetos.

No sistema de conta corrente foram identificados, a princípio, 3 tipos ou grupos de objetos: Cliente, Agência e Conta.

Sabemos que poderão existir vários objetos de cada um desses tipos e todos eles irão possuir o mesmo conjunto de atributos e comportamentos do seu tipo.

Para criar uma representação de cada objeto dentro do programa, devemos antes criar uma estrutura, uma espécie de molde ou template que represente os atributos e comportamentos do tipo do objeto.Essa estrutura é chamada de classe.

Portanto, devemos ter uma classe Cliente, uma classe Agência e uma classe Conta.

É a partir dessa estrutura conhecida como classe que iremos criar as representações de objetos que precisamos para desenvolver o programa, ou seja, precisamos criar a estrutura (classe) apenas uma vez e, a partir dela, serão criadas as representações dos objetos.

Classes e Objetos

Uma classe é a descrição de atributos e comportamentos de um grupo de objetos com propriedades similares (atributos) e comportamento comum (operações ou métodos).

Por representar atributos e comportamento de um determinado tipo de objeto que existe no mundo real, uma classe é uma abstração da realidade, pois nela estão especificados somente parte dos atributos e comportamentos de um objeto do mundo real. Somente parte, porque não são todos os atributos e comportamentos dos objetos do mundo real que interessam ao sistema.

A figura a seguir, ilustra a representação gráfica das classes do sistema de conta corrente. Na primeira parte da figura está o nome da classe, na parte do meio, estão os atributos e, na parte final, está o comportamento (métodos ou operações).

Observe que a classe Conta e Agencia ainda não estão com os comportamentos definidos. Faremos isso na medida que avançarmos nos conceitos de OO.

Um objeto é uma instância de uma classe. Essa instância possui valores próprios em cada atributo definido na classe. As figuras a seguir ilustram a classe Cliente e os vários objetos (instâncias) da classe Cliente.

A notação que estamos utilizando para representar classes e objetos é a utilizada pela UML (Unified Modelling Language) ou Linguagem de Modelagem Unificada. A UML não é uma linguagem de programação e sim, uma linguagem composta de vários diagramas (cada qual com seu conjunto de símbolos gráficos) que expressam como um sistema orientado a objetos deve funcionar. Ela é utilizada nas fases iniciais do desenvolvimento de um software, ou seja, antes da programação propriamente dita, com o objetivo de especificar e documentar o funcionamento do sistema. O diagrama que iremos utilizar é o Diagrama de Classes que especifica as classes do sistema e o relacionamento entre elas.

Para finalizar este módulo, uma pequena revisão:

Um programa orientado a objeto é composto por vários objetos do mesmo tipo e de outros tipos que se relacionam. Chamamos esses objetos do mundo do software de representações de objetos. Como num programa muito provavelmente existirão vários objetos do mesmo tipo, devemos criar uma estrutura ou template que represente os atributos e comportamentos desses objetos do mesmo tipo, essa estrutura é chamada de classe. Portanto classe é uma estrutura a partir da qual os objetos (do software) são criados.

Dúvidas? Comentem! Até a próxima!

, ,

1 Comment

Tutorial Series: Orientação a objetos utilizando PHP

Pessoal, boa tarde!

Vou iniciar (esta semana se possível) uma série de tutoriais sobre orientação a objetos utilizando o PHP. Sempre tive um certo “bloqueio” com orientação a objetos.  Se você ainda fica meio perdido na orientação a objetos, esta pode ser uma boa hora pra aprender! Usarei como base um material  de EaD muito bom criado pela Andréa Bordin. No material, a linguagem utilizada foi o Java. Meu trabalho será transcrevê-lo para o PHP.

PS: Nos tutoriais irei partir do princípio que você já sabe PHP, mas podem tirar dúvidas à vontade nos comentários.

Iremos começar com um módulo introdutório em breve.

Um abraço!

, ,

2 Comments

Uma mão na roda… IE TAB

Creio que a maioria dos programadores  web (inclusive eu) programa sempre utilizando o Firefox. E também creio que a maioria também (inclusive eu) sempre esquece de testar seus sistemas no Internet Explorer.

Pois é, passei por isso hoje aqui no trabalho. O CSS de uma tela funciona 100% no IE 8 mas não funciona no IE 7. Um amigo me indicou um plugin do Firefox bem bacana chamado IE TAB. Ele emula a visualização do Internet Explorer em uma aba do Firefox.  Além disso, você ainda pode criar uma listra de filtros para definir os sites que você quiser sempre visualizar na aba “emulada” do IE.

O único “porém” que encontrei até agora foi que não consigo utilizar o Firebug nas abas do IE… Caso encontre alguma solução para isso, aviso a vocês.

Enfim, uma mão na roda para designers e programadores. Recomendo!

Site Oficial do IE TAB


Update em 28/04/2010:

Uma outra opção para quem possui o Internet Explorer 8 instalado é o modo de compatibilidade. No IE 8, pressionando F12 (ou Ferramentas -> Ferramentas para desenvolvedores) é exibido uma ferramenta “parecida” com o Firebug. Basta selecionar o “Modo do Navegador”. Resolveu meu problema de testes no IE 8 e IE 7…

, , , ,

1 Comment

Técnica Pomodoro: Gerenciando melhor o seu tempo

Lendo hoje os feeds da infoq conhecí a Técnica Pomodoro, uma maneira simples e interessante de gerenciar o seu tempo para obter uma maior produtividade.

A técnica foi criada por Francesco Cirillo nos anos 80. Ele precisava melhorar a qualidade do seu tempo de estudo e chegou à conclusão de que precisava estar totalmente focando durante um determinado período. Para isso, ele utilizou um cronômetro em forma de tomate (pomodoro, em italiano), daí surgiu o nome da técnica.

Você já se perguntou se consegue trabalhar por 20 minutos totalmente focado no que está fazendo? Coisas para nos atrapalhar não faltam: messengers, emails, telefonemas, solicitação de colegas etc… Eu posso afirmar que, hoje, não consigo trabalhar por 20 minutos totalmente focado.

A técnica consiste em ciclos (pomodoros) simples:

1 – Escolher a tarefa a ser executada;

2 – Ajustar o pomodoro (alarme) para 25 minutos;

3 – Trabalhar na tarefa até que o alarme toque;

4 – Fazer uma pausa curta (3 a 5 minutos);

5 – Iniciar o próximo pomodoro.

A cada 4 pomodoros, a pausa deve ser mais longa (15 a 30 minutos).

Com o tempo, o planejamento das tarefas pode ser feito diariamente, pois você terá mais noção  da medição da sua produtividade, do quanto pode fazer e em quanto tempo pode fazer.

Nos últimos anos esta técnica tem atraído a atenção da comunidade ágil. Indico este artigo para quem se interessar e quiser mais informações. Também indico a wikipedia, lá tem até uns softwares para controle dos seus pomodoros, bem bacana.

Não sei o quanto isso chamou a atenção de vocês, mas chamou a minha. Creio que posso produzir mais cansando menos e aprender a medir a minha produtividade. Eu vou começar a utilizar a técnica hoje mesmo! Em breve postarei informações sobre minha evolução com essa prática…

Site oficial Pomodoro Technique

, , , , ,

No Comments

js.Fiddle – Editor HTML, JavaScript e CSS online

Parece simples, mas podem existir situações em que isso aí pode ser uma mão na roda! Vale a pena dar uma olhada…

http://jsfiddle.net/

, , ,

No Comments

Software Livre? Só se os EUA quiserem…

Pois é, acreditem… Não vou nem comentar, somente leiam.

O Sourceforge, maior biblioteca de desenvolvimento de projetos de “software livre” – programas de computador que não exigem licensa e são de uso irrestrito – chocou os meios de informática do mundo inteiro ao bloquear o acesso de internautas de acordo com as listas negras expedidas pelo governo americano. São milhares de pessoas e empresas, de várias partes do mundo e simplesmente todos os internautas residentes em Cuba, na Síria, Irã, Coréia do Norte e no Sudão.

Artigo na íntegra: http://softwarelivre.org/portal/comunidade/software-livre-nao-e-livre-para-paises-que-eua-vetam

No Comments

13 soluções para gráficos em JavaScript

Utilizar JS para gráficos deve ser complicado quando se fala em performance, mas nunca se sabe quando vai precisar de algo do tipo. Por isso, fica aqui a dica. Achei bem interessante o post do amigo Henry Jones com 13 soluções para gráficos em JavaScript.

Leia aqui: http://webdesignledger.com/resources/13-useful-javascript-solutions-for-charts-and-graphs

,

No Comments

NetBeans IDE 6.8 – PHP Development

Devido a alguns problemas aqui no trabalho, a duas semanas atrás tive que voltar ao Windows XP.  Resolví inovar um pouco utilizando o Zend Server CE (que já comentei aqui no blog) e continuei utilizando o Eclipse. Estava complicado programar no Eclipse pois estava muito pesado, sem falar no tempo que demora para inicializar/finalizar… Então resolví instalar o NetBeans PHP Development. Quando comecei a programar não gostei muito do NetBeans e uso o Eclipse desde então, mas nestas condições (sistema operacional e máquina com pouco poder de processamento) preciso reconhecer que o NetBeans está deixando o Eclipse no chinelo.  Inicializa em um piscar de olhos e utiliza pelo menos 40% menos de memória que o Eclipse. O autocomplete da versão para PHP funciona perfeitamente, o navegador de projetos, templates de código… Enfim, fica a dica para quem estiver na mesma situação que eu. Se você tiver uma máquina meia boca e estiver procurando desempenho, experimente o Netbeans.

Deixo bem claro que não passei a ser “defensor cego” do Netbeans. Em casa continuo utilizando Eclipse no Ubuntu 9.10.

Visite o site do NetBeans IDE 6.8 – PHP Development

, , ,

2 Comments

Zend Server CE

A um bom tempo venho desenvolvendo com o Linux aqui na minha máquina do trabalho (e em casa também), mas esta semana precisei voltar ao Windows. Confesso que tinha um certo “trauma” para configurar o ambiente de desenvolvimento no Windows, seja instalando separado o Apache e o PHP, seja usando os “AMP´s” da vida. Mas dessa vez resolví usar o Zend Server Comunity Edition. Com ele não tive problema nenhum para integrar o Apache com o PHP, nem muito menos para habilitar as extensões que uso aqui (mysql, pgsql, oci)… O console de administração também é bem bacana. Realmente gostei e recomendo!  No Linux ainda não testei, mas quem sabe em breve…

Site oficial do Zend Server Comunity Edition

, , ,

1 Comment