Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/11/2006, 17:56
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Es mas sencillo si lo realizas de la forma que te lo propongo supon que tienes una interface DB (acceso a Bases de Datos)

Tu creas tu objeto, supongamos usuarios, y tu lo usas y lo rehusas en tus proyectos, puedes evitarte instanciar codigo al hacerlo en tu constructor. Ahora supongamos que le prestas a Fulano tu clase usuarios, pero él quiere utilizar su clase DB, lo que haces ahi es decirle, ok mi clase si sirve pero necesitas que tu clase DB implemente mi clase abstracta para que no haya problemas con metodos.

Luego usas metodos estaticos para cambiar la clase que usas, te pongo un ejemplo:
Código PHP:
interface DB {
       public function 
connect($server$user$pass);
}

class 
MySQLDB implements DB {
     private 
$link;

     public function 
connect$server$user$pass ) {
         
$this->link mysql_connect$server$user$pass );
     }


class 
Usuarios {
      private static 
$dbInterface null;

      public function 
__construct() {
            if( !isset( 
self::$dbInterface ) ) {
                  
self::$dbInterface = new MySQLDB();
            } else {
                 if( !( 
self::$dbInterface instanceof DB ) ) {
                       throw new 
Exception"Database adapter must implement interface DB" );
                 }
            }

            
self::$dbInterface->connect();
      }
      
      public static function 
setDBAdapterDB $db ) {
            
self::$dbInterface $db;
      }

En ese ejemplo tu clase usuarios por defecto va a usar MySQL DB para realizar sus consultas, pero si en un futuro quieres usar otro adaptador solo llamas a la funcion setDBAdapter con una nueva clase DB, (puede ser MSSQL, PostgreSQL, etc.)