Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Error con Abstract, Singleton

Estas en el tema de Error con Abstract, Singleton en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas a todos, espero que puedan ayudarme el error que me sale es el siguiente. Using $this when not in object context in Código PHP: ...
  #1 (permalink)  
Antiguo 28/03/2009, 13:42
 
Fecha de Ingreso: octubre-2007
Mensajes: 21
Antigüedad: 17 años, 2 meses
Puntos: 0
Error con Abstract, Singleton

Buenas a todos, espero que puedan ayudarme el error que me sale es el siguiente.

Using $this when not in object context in

Código PHP:


abstract class Comandos
     
{
    

        function 
__set$key ,$value )
        {
            if( isset( 
$value ) )
            {
                
$this->$key $value;
                return 
true;    
            }
            
        }



        function 
__get$key )
        {
            if( isset( 
$this->$key ) )
            {
                return 
$this->$campo;
            }
            else
            {
              return 
NULL;
            }

        }
    }


class 
b2db extends Comandos
{
    public static 
$MySQLInst null;
    public static 
$SqlServerInstance null;
    public static 
$PostGrInstance null;
    private 
$dbhost "localhost";      // Host de la BD
    
private $dbuser "root";  // Nombre de Usuario de la BD
    
private $dbpwd;     // Password de la BD
    
private $dbname;        // Schema a usar
    
private $dbtype "mysql";  // Schema a usar
    
private $dbtables;        // Schema a usar
    
    
public function __construct(){}
    
    public static function 
setTypeDB$type )
    {
        
$this->__set'dbtype' $type );
    }
    
    public static function 
connection$dbname$dbuser=''$dbpwd$dbhost='' )
    {
        
        
$this->__set'dbname' $dbname );// error
        
$this->__set'dbuser' $dbuser );// error
        
$this->__set'dbpwd' $dbpwd );// error
        
$this->__set'dbhost' $dbhost );// error
        
        
$type $this->__get'dbtype' );// error
        
         
switch($type)
          {
           case 
'mysql':
             if(!isset(
self::$MySQLInst))
              {
                    
self::$MySQLInst =  new MySQL();
              }
               return 
self::$MySQLInst;
           break;
    
               case 
'mssql':
    
           if(!isset(
self::$SqlServerInstance))
            {
    
                
self::$SqlServerInstance =  new mssqlconnect();
            }
          return 
self::$SqlServerInstance;
          break;
    
          case 
'pgsql':
           if(!isset(
self::$PostGrInstance))
            {
    
                
self::$PostGrInstance =  new pgconnect();
            }
          return 
self::$PostGrInstance;
          break;
    
          }

      }

}


$MySQL b2db::connection("motor""carlos""jackasito");

$MySQL->dbname
Intento capturar con set los parametros de conexion, para luego adentro de cualquier motor de db ya sea mysql, mssql o pgsql pueda obtenerlos con get.

Si hago set adentro de cada motor de db si funciona, pero por que repetirlo puedo hacerlo afuera y que los datos esten para todos los motores para luego solo llamar a una funcion connect() y establesca la conexion.

Creo que el error sale por que en realidad b2db no se concidera como una clase por que instancia los motores de db no ella misma.

Aver si alguien me da una mano
  #2 (permalink)  
Antiguo 30/03/2009, 10:25
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años, 2 meses
Puntos: 48
Respuesta: Error con Abstract, Singleton

Es que no estas usando b2bd como un singleton, o lo estas usando mal. Su constructor debe ser privado, deberia tener una propiedad static para almacenar su instancia, y un metodo static que crea la instancia si no esta creada ya, y luego devuelve la instancia. No puedes llamar a $this dentro de funciones static y sin haber instanciado el objeto.

Personalmente creo que estas liandote con los patrones, por el uso parece que lo que quieres es una factory.
  #3 (permalink)  
Antiguo 30/03/2009, 10:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: Error con Abstract, Singleton

El problema es que llamas a objetos de forma estatica, cuando lo haces no existe $this, ya que es forzoso iniciar un nuevo objeto usando new className().

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:20.