Ir para conteúdo
Fórum Script Brasil
  • 0

Singleton PHP 5.2


Jean Roloff

Pergunta

Seguinte, fiz um esquema de Singleton em uma classe que tenho como Base no meu 'CMS'.

a função basicamente recebe a classe como parametro, verifica se existe a instancia do objeto, se não existir cria, e retorna o objeto. Porém eu não tenho uma função assim em cada classe, e sim só na minha classe base.

A função é assim:

public static function getClass($classe)
{  
 if( !isset($classe::$instance) ) {
  $classe::$instance = new $classe;
 }

 return $classe::$instance;
}
e na hora de chamar eu apenas chamo assim:
$teste    = Base::getClass('teste');
$pessoa = Base::getClass('pessoa');

e assim vai...

Mas isso só funciona no PHP 5.3, e a maioria dos servidores dos clientes são 5.2, e sem suporte ao PHP 5.3.

No PHP 5.2 tem como eu fazer algo parecido com isso $classe::$instance para verificar se já existe a instancia da classe?

Grato.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Eu utilizo a versão 5.2.6 do PHP e não tive problemas com o padrão Singleton.

Eu fiz uma modificação e um teste no seu fonte, de uma olhada:

class Base {
    
    public static $instance;
    
    public static function getClass($classe) {
        if (! isset(self::$instance)) {
            self::$instance = new $classe();
        }
        return self::$instance;
    }
}

class carro {
    private $cor;
    private $comprimento;
    
    public function getComprimento() {
        $this->comprimento = 375;
        return $this->comprimento;
    }
    
    public function setCor($cor) {
        $this->cor = $cor;
    }
    
    public function getCor() {
        return $this->cor;
    }
}

//recupera a instancia da classe carro
$c = Base::getClass('carro');

echo $c->getComprimento();
$c->setCor('Preto');
echo $c->getCor();


//recuperando novamente a intancia da classe carro
$c2 = Base::getClass('carro');
echo $c2->getCor();

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...