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();arquivo2class 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.phpclass subclasse extends Exemplo
{
public static function singleton()
{
return parent :: singleton( __CLASS__ );
}
public function teste()
{
print 'Testando primeiro método de uma subclasse';
}
}subclasse2.phpclass 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.










