sexta-feira, 1 de julho de 2011

Silêncio na biblioteca : Como usar outras classes em sua biblioteca customizada

Escrever suas próprias bibliotecas customizadas é essencial quando se faz certos tipos de aplicação.
Mas o bom de orientação a objetos é que podemos reutilizar as variáveis e métodos já existentes em outras classes, e no caso do Zend, é preferível que utilizemos os métodos já definidos nas classes de sua biblioteca, ou ainda, usar alguma classe de controller, model ou helper que você já fez, porque afinal gastar tempo e espaço ( ainda que seja ridiculamente pequeno ) no HD quando podemos utilizá-los não ?

Pois bem, aqui temos dois modos de se reutilizar uma classe criada na estrutura do Zend.

A primeira é a clássica "extends", o mais comum quando se trabalha com objetos:

class Mylib_Minhaclasse extends ClasseDesejada {

...

} 

Dai já pode utilizar os métodos e variáveis da classe desejada como se fosse de sua classe. Bem simples.

Um outro modo muito legal que descobri também para utilizar qualquer biblioteca sem precisar extender é esse:

1 - Declare o construtor de sua classe

class Mylib_Minhaclasse {

    public function Mylib_Minhaclasse(){


    }

...

} 

2 - Dentro do construtor, chama explicitamente a classe que quer usar usando 'require_once'

class Mylib_Minhaclasse {

    public function Mylib_Minhaclasse(){

          require_once( APPLICATION_PATH."/caminho_pra_classe_desejada/ClasseDesejada.php");

    }

...

} 

3 - Crie uma variável na sua classe para criar o objeto da classe desejada:

class Mylib_Minhaclasse {

    protected $obj = null;

    public function Mylib_Minhaclasse(){

          require_once( APPLICATION_PATH."/caminho_pra_classe_desejada/ClasseDesejada.php");
          $obj = new ClasseDesejada.php

    }

...

} 

4 - Agora, inicializa o objeto da classe desejada usando o método 'init':

class Mylib_Minhaclasse {

    protected $obj = null;

    public init(){

        $this->Mylib_Minhaclasse();

    }

    public function Mylib_Minhaclasse(){

          require_once( APPLICATION_PATH."/caminho_pra_classe_desejada/ClasseDesejada.php");
          $obj = new ClasseDesejada.php

    }

...

} 

E pronto, já pode usar em sua biblioteca customizada qualquer classe que desejar sem precisar extender nada. Achei legal assim, porque você pode usar mais de uma classe, o que extendendo limita a somente uma, e de certo modo, deixa sua classe mais "pura".



Referências: http://framework.zend.com/manual/1.11/en/performance.classloading.html