Usando minha class de database com outras classs no meu projeto

Eu tenho uma class de database personalizada que eu escrevi, e também tenho uma class de usuários e uma class de site.

A class MySQL possui methods como este:

connect query clean fetch 

A class de usuário:

 register login logout resetPass 

A class do site:

 updateTopics addTopic addPost addReply 

etc.

Essas classs precisam interagir com um database, para o qual eu escrevi a class MySQL. Mas, eu não tenho ideia de como usar corretamente a class MySQL com essas classs. Defino a class como global e basta referenciá-la nas outras classs? Eu faço algo como:

 $db = new MySQL(); $user = new User($db); 

e então faça referência a isso assim?

Qualquer ajuda é apreciada, obrigado. 🙂

    Além da resposta de Daniel Vandersluis: Instanciar o object dentro de sua class cria uma forte dependência entre essas classs. Você pode, em vez disso, estar interessado em injeção de dependência e inversão de controle (recipientes + ioc).

    Vejo:
    http://en.wikipedia.org/wiki/Dependency_injection
    http://martinfowler.com/articles/injection.html


    btw: Você realmente precisa de sua própria implementação da class MySQL? Já existem muitas camadas de access e abstração de database disponíveis. Eg http://docs.php.net/pdo .

    Você poderia instanciar sua class MySQL dentro de suas outras classs, assim:

     class User { private $db; function __construct(...) { $this->db = new MySQL(); } function accesses_database(...) { $this->db->query(...); } } 

    E, em seguida, faça referência $this->db dentro de sua class quando quiser acessar o database.

    Além disso, se você quer que apenas seja uma instanciação do MySQL , você pode torná-lo um singleton .

    você pode estar interessado em avaliar a class MySql apenas uma vez. ele impede que a conexão seja aberta e fechada muitas vezes durante a execução. Eu gosto de usar o conceito Factory. É uma class que lida com a instanciação de objects e você pode gravá-lo para permitir apenas uma instância, seguindo o conceito de Singleton.

    someting assim:

     class Factory { private static $objects = array(); static function get_database() { if( ! isset(self::$objects['database'])) self::$objects['database'] = new MySql(); return self::$objects['database']; } } 

    você usaria assim:

     $db = Factory::get_database(); 

    note que sempre retorna a mesma instância do MySql em vez de criar novas.

    Bem, mas é apenas uma implementação muito simples de uma fábrica, apenas para entender. poderia ser muito melhor =]