quarta-feira, 9 de novembro de 2011

Conceito. Desenvolvimento com ZF

Fala pessoal tudo bom? Hoje não vou fazer um post mas sim deixar aqui um SLIDE que estou mostrando de forma conceitual e rápida como funciona o desenvolvimento ágil e prático com o Zend Framework ligado a outras tecnologias...


segunda-feira, 7 de novembro de 2011

Entenda Singleton

Olá tudo bem? Hoje vou falar sobre um assunto muito interessante para o desenvolvimento atual, vou falar sobre Singleton!


Mas espera ai... o que é singleton? Pesquisei no google e vi que Singleto é um whisky.....
Sério um WHISKY! Eita, em um blog assim eu vou ficar falando sobre bebidas? 
Não! Na verdade SINGLETON é uma palavra muito falada atualmente no desenvolvimento mas muitas pessoas não sabem nem a que se refere e as vezes até falam por ai Oo'...

Singleton é um padrão de desenvolvimento(os famosos Design Patterns) . Sabe? assim como o MVC, DAO... Lógico que não é igual ao MVC,DAO pois não é possível que alguém tenha criado o mesmo padrão duas vezes não acham? O Singleton é na verdade bem específico pois sua proposta é para garantir a existência de uma única instância de uma classe, permitindo um acesso global a esta instância.


Quando é necessário utilizar?
Muitos projetos necessitam de classes que sejam instanciadas apenas uma vez, por exemplo:
Classes de conexão com banco de dados, entre outras. veja um exemplo prático do php.net (fique ligado[a] nos comentários do código)





  1. <?php
  2. class Exemplo{
  3.     // Guarda uma instância da classe
  4.     private static $instance;
  5.    
  6.     // Um construtor privado; previne a criação direta do objeto
  7.     private function __construct()
  8.     {
  9.         echo 'Sou um construtor';
  10.     }
  11.     // O método singleton
  12.     public static function singleton()
  13.     {
  14.         if (!isset(self::$instance)) {
  15.             $c = __CLASS__;
  16.             self::$instance = new $c;
  17.         }
  18.         return self::$instance;
  19.     }
  20.    
  21.     // Método exemplo
  22.     public function latir()
  23.     {
  24.         echo 'Au!';
  25.     }
  26.     // Previne que o usuário clone a instância
  27.     public function __clone()
  28.     {
  29.         trigger_error('Clone is not allowed.', E_USER_ERROR);
  30.     }
  31. }
  32. ?>

Isso permite que uma instância única de Exemplo seja recuperada.


  1. <?php
  2. // Isso falharia porque o construtor é privado
  3. $test = new Exemplo;
  4. // Isso sempre vai recuperar uma instância da classe
  5. $test = Exemplo::singleton();
  6. $test->latir();
  7. // Isso irá emitir um E_USER_ERROR.
  8. $test_clone = clone $test;
  9. ?>



Conclusão

A utilização do pattern singleton permite uma facilidade maior no controle das classes que não devem ser instanciadas mais do que uma vez.
Normalmente uma classe singleton é utilizada em conjunto com uma classe factory que em breve eu irei explicar.


s-i-g-a-m-e @pv_fusion

sexta-feira, 4 de novembro de 2011

Polimorfismo e Herança no PHP

Olá meus amigos e amigas tudo bem? Hoje vou falar de um assunto atípico dos meus posts... hoje vou falar sobre Polimorfismo e Herança no PHP. E se você acha que não existe isso no php tome cuidado com o que fala, o php vem evoluindo muito!

Uma classe é uma estrutura básica para a criação de objetos ou seja, vários objetos podem ser criados seguindo a mesma estrutura, porém com dados diferentes. 
Em algumas casos é necessários ter objetos idênticos com algumas funcionalidades a mais ou então com as mesmas funcionalidades, mas com comportamentos diferentes...

Herança

O que será esse carinha? Herança faz parte de um dos 3 pilares da POO uma herança é a
forma de um filho obter características do pai na vida real concorda? Na POO também é assim...

Por exemplo um carro e uma moto possuem características bem parecidas. Ambos possuem rodas e marchas que são semelhantes em qualquer veículo.
Pensando assim podemos dizer que carro é um veículo, assim como uma moto também é um veículo concordam? Logo carro e moto herdam características de veículo.

Esse exemplo é muito simples no php, e para herdar de uma classe utilizamos o 'extends' veja:



  1. <?php
  2. class Veiculo
  3. {
  4.         private $marcha;
  5.         private $quantidadeRodas;
  6.         public function passarMarcha()
  7.         {
  8.                 // código
  9.         }
  10.         public function andar()
  11.         {
  12.                 // código
  13.         }
  14. }
  15. class Carro extends Veiculo
  16. {
  17.         public function __construct()
  18.         {
  19.                 $this->quantidadeRodas = 4;
  20.         }
  21. }
  22. $carro = new Carro();
  23. $carro->andar();



Veja só, criamos a classe veículo com atributos marcha e quantidadedeRodas e criamos uma classe carro que extende da veículo já com o construtor montando a quantidade de rodas. simples não? Herança SUALINDA :D


Polimorfismo

Poli o que? Oo'
POLIMORFISMO! Mas o que é isso? Vamos primeiro entender a palavra, polimorfismo significa muitas formas (poli: muitas, morphos: formas). Esse conceito é perfeito pois na POO significa que várias classes podem possuir a mesma estrutura e comportamentos diferentes. Quando utilizamos herança não apenas podemos reutilizar métodos da classe pai, como também podemos sobreescrever os métodos da classe pai, fazendo assim com que certas características sejam modificadas para a determinada classe.

Vamos imaginar que um banco possui dois tipos de cheques; o chque comum e o especial. Os dois possuem a mesma estrutura o que diferencia um do outro é a forma de cobrança de juros. O comum cobra 25% em cima do valor e o cheque especial o valor dos juros de 10% como podemos fazer sem escrever a mesma coisa? Assim:



  1. <?php
  2. class ChequeComum
  3. {
  4.     protected $valor;
  5.         // ... outros métodos da classe
  6.         public function setValor( $valor )
  7.         {
  8.                 $this->valor = $valor;
  9.         }
  10.         public function getValor()
  11.         {
  12.                 return $this->valor;
  13.         }
  14.         public function calculaJuros()
  15.         {
  16.                 return $this->valor * 1.25; // soma 25% em cima do valor
  17.         }
  18. }
  19. class ChequeEspecial extends ChequeComum
  20. {
  21.         public function calculaJuros()
  22.         {
  23.                 return $this->valor * 1.10; // soma 10% em cima do valor
  24.         }
  25.        
  26.         public function calculaJurosPai(){
  27.                 return $this->valor = parent::calculaJuros();
  28.         }
  29. }
  30. $cheque = new ChequeEspecial();
  31. $cheque->setValor(1000);
  32. //CHAMANDO DA PRÓPRIA CLASSE
  33. echo $cheque->calculaJuros();
  34. echo "<hr>";
  35. //CHAMANDO DA CLASSE PAI
  36. echo $cheque->calculaJurosPai();
Antes de mais nada veja que na classe ChequeComum criei o atributo $valor com o acesso 'protect' ou seja, disse que ele é protegido assim pode ser acessado pela própria classe e classes que 'ligam' ela.

Perceba que na classe ChequeEspecial eu criei um método chamado calculaJurosPai ele foi apena para mostrar que se existir a necessidade do uso de um método sobrescrito devemos acessar ele paralelamente dessa forma (parent::).
Como exemplo eu criei o objeto e exibi os dois calcula juros...

Legal não é? Agora utilize =]

Obrigado e até a próxima