Dúvidas Gerais

Gravatar de Osmar Alves Osmar Alves Tópico publicado em
07/10/2009, 08:45:56

Função &getInstance()

Alguem poderia me explicar pra que serve essa função?


public static function &getInstance() {
        static $instance = array();
        if(!isset($instance[0]) || !$instance[0]):
                $instance[0] = new Config();
        endif;
        return $instance[0];
}

Eu sei que é no comentário ta assim: "Retorna uma única instância (Singleton) da classe solicitada.", mas gostaria de saber para que ela é usada.

Obs.: Eu tirei essa da classe Config, mais tem em quase todas.

Gravatar de Klawdyo Klawdyo Resposta publicada em
07/10/2009, 09:41:30

Função &getInstance()

É isso mesmo que ela faz: Para que o framework não precise ficar instanciando a mesma classe em todas as chamadas à configuração, ela verifica se já houve alguma chamada, e a usa.

Gravatar de Julio Greff Julio Greff Resposta publicada em
07/10/2009, 10:05:01

Função &getInstance()

PHP não tem variáveis de classe como no Ruby (variáveis estáticas não me parecem exatamente a mesma coisa), então eu sempre achei melhor usar variáveis de instância mesmo. Como para usar variáveis de instância eu precisaria de uma nova instância da classe (e perderia os dados, consequentemente), usei o pattern Singleton, que me permite usar variáveis de instância através de métodos estáticos.

Gravatar de Osmar Alves Osmar Alves Resposta publicada em
07/10/2009, 10:32:59

Função &getInstance()

Hmmm..... agora intendi, pq quando vc declaro a var:

static $instance = array();

Ela fica do mesmo jeito independentemente de quantas vezes for chamada, ai aki:

if(!isset($instance[0]) || !$instance[0]):
            $instance[0] = new Config();
        endif;

...verifica se ela ja foi instanciada, se não estancia, e depois retorna o próprio objeto que ja esta na variável.

Essa parte eu intendi, agora o porque do self::getInstance(); aqui, por exemplo:

public static function read($key = "") {
        $self = self::getInstance();
        return $self->config[$key];
    }

...não poderia ser usado $this->getInstance();?

Eu to fazendo essas perguntas pq eu quero intende o funcionamento do core do spaghetti, pra mim pode ajuda no desenvolvimento de components e helpers tb, =)

Vlw pessoal.

Gravatar de Julio Greff Julio Greff Resposta publicada em
07/10/2009, 10:40:46

Função &getInstance()

Não, não poderia ser $this. Como é um método estático, não existe $this, porque não há um objeto, então não há ao que se referir. É também por isso que existe o getInstance, caso contrário eu poderia user $this->config[$key] ali, sacou?

Gravatar de Osmar Alves Osmar Alves Resposta publicada em
07/10/2009, 10:45:11

Função &getInstance()

Hmm... não manjava nada disso de métodos e variáveis estáticas, agora to intendendo, pra que são usados e como são usados (vou pesquisar mais depois sobre Singleton).

Vlw Julio e Klawdyo pelas explicações, depois se eu tiver mais alguma dúvida sobre alguma outra coisa eu abro um novo post. Flw.

Você deve estar logado para responder a um tópico ou adicionar um novo.
Efetue login ou Registre-se para participar das discussões.