Pois bem, abri o tópico, comecei a editar, cliquei no botão e cai a conexão. Nada demias, até então não tinha salvo.
Erro terível. Salvo um pedaço. Como um pedaço só não serve, eu resolvi apagar tudo, portanto se alguém puder removê-lo seria útil.
Continuando.
Queria fazer um esquema para acessar tantas subclasses quantas existam em meu sistema através de uma única instãncia de objeto.
Vejam:
arquivo1
// Auto Load function __autoload( $class ) { require_once( $class . '.php' ); } class classe extends subclasse { // Blah Blah Blah } $classe = new subclasse2; $classe -> teste();arquivo2
class subclasse { public function teste() { print 'Testando segundo método de uma subclasse'; } } class subclasse2 { public function teste() { print 'Testando segundo método de uma segunda subclasse'; } }No arquivo eu deixei uma classe vazia, pois vou preenchê-la com a ajuda que espero obter aqui
No objeto $classe eu posso instancia qualquer classe que tenha sido automaticamente requerida pelo __autoload()
Belezinha. Mas, não que eu vá usar no sistema que atualmente desenvolvo, mas para o próximo eu gostaria de centralizar todas chamadas aos métodos de todas as classes através de um único objeto, que pode ser, no caso o próprio $classe
Não sei se é puramente estético ou se justifica em algo no quesito desempenho / produtividade, mas enfim...
Aparentemente é uma idéia besta pois tanto faz eu criar u novo objeto para cada classe.
Porém a real intenção seria para quando houverem acima de três classes. Daí eu oderia acessar assim:
$classe -> subclasse_1 -> subclasse_2 -> (...) subclasse_n ->metodo()Não que planeje esquartejar o código que nem aqui no Invision Power Board
Onde metodo() faria parte de, por exemplo, subclasse_2.
subclasse_2 seria instanciada dentro de subclasse_1 que por sua vez seria instanciada dentro de $classe (talvez em seus construtores ou algum método, não sei o melhor meio)
E poderia acessar no modelo acima.
Representativamente, poderia ser:
$superclasse -> Enquetes -> carregaEnquetesOu
$superclasse -> Mensagens -> Erro()E por aí vai. Pra organizar bem direitinho e bonitinho
Isso é possível?
[EDIT]
Fui dar uma olhada no Design Pattern Singleton e ele faz quase o que quero.
classe.php
// Auto Load function __autoload( $class ) { require_once( $class . '.php' ); } class Exemplo { private static $instance; public static function singleton( $classname = __CLASS__ ) { if ( ! isset( self :: $instance ) ) { self :: $instance = new $classname; } return self :: $instance; } }subclasse.php
class subclasse extends Exemplo { public static function singleton() { return parent :: singleton( __CLASS__ ); } public function teste() { print 'Testando primeiro método de uma subclasse'; } }subclasse2.php
class subclasse2 extends Exemplo { public static function singleton() { return parent :: singleton( __CLASS__ ); } public function teste() { print 'Testando segundo método de uma segunda subclasse'; } }Mas, no classe.php se eu usar:
$subclassInstance = subclasse::singleton(); $subclassInstance->teste(); print '<br /><br />'; $subclassInstance2 = subclasse2::singleton(); $subclassInstance2->teste();Ou seja, duas instâncias diferentes, a mesma coisa é exibida, isto é, a frase de teste() de subclasse.php
Se eu tento renomear o método teste() para teste2(), me retorna:
Mas é uma instância diferente que pega um método diferente, de uma classe diferente.Fatal error: Call to undefined method subclasse::teste2() in C:\root\teste\Singleton_1\index.php on line 29
Tem como fazer a minha idéia (ou algo CORRETAMENTE próximo à ela) com um Design Patter? Só consegui entender parte do Singleton, os exempos do Factory disponíveis são tudo iguais e pouco explicados.
Edição feita por: Bruno Augusto, 14/02/2008, 10:00.