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

crear singleton

Estas en el tema de crear singleton en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimado amigos, les vengo a molestar una vez mas (y van....) esta vez es sobre el tema sigleton, estoy siguiendo el tutorial que se encuentra ...
  #1 (permalink)  
Antiguo 13/06/2008, 19:21
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
crear singleton

Estimado amigos, les vengo a molestar una vez mas (y van....) esta vez es sobre el tema sigleton, estoy siguiendo el tutorial que se encuentra en http://www.jourmoly.com.ar/introducc...segunda-parte/

que aplica el patrón singleton para PDO, bien ahora quiero hacer los mismo para usa la instancia de otra clase, pero nose si lo estoy haciendo bien.

Hasta ahora venia usando asi la clase:
Código PHP:
include('PHT.php');
session_start();
$HT=new CHPPConnection('nukestats','/test');
        
        if( 
$HT->connectUser($user,$pass))
        {
              
$_SESSION['HT'] = $HT;
              
              
$team $HT->getTeam();

              echo 
$team->getTeamName().' '.$team->getShortTeamName().' '.$team->getTeamId()."<br/>"
Guiandome por como creo el singleton de PDO en el tutorial yo arme esto, pero dudo que este bien:
Código PHP:
class HT extends CHPPConnection {
        private static 
$instance null;
     
        public function 
__construct() 
        {
            
$HT Config::singleton();
            
$HT = new CHPPConnection('nukestats','/test');
            
parent::__construct($HT->connectUser('destor77','123'));
            
        }
     
        public static function 
singleton() 
        {
            if( 
self::$instance == null 
            {
                
self::$instance = new self();
            }
            return 
self::$instance;
        }
    } 
en la parte que no estoy seguro es en esta:
$HT = new CHPPConnection('nukestats','/test');
parent::__construct($HT->connectUser('destor77','123'));


La idea es la siguiente, para mostrar ciertos datos en mi pagina necesito crear una instancia de CHPPConnection el cual es una clase con un montón de métodos y otras clases. Como estoy implementando MVC y no quiero tener que crear una instancia en cada sección pensé en usar singleton, pero creo que no lo estoy implementando bien.

O me conviene armar una clase abstracta así:
Código PHP:
abstract class HT {
        
        protected 
$ht;
     
        function 
__construct()
        {
            
$this->ht= new CHPPConnection('nukestats','/test');
            
$thi->ht->connectUser('destor77','123');
        }
    } 
si me pueden guiar un poco se los agradecería.

salu2

Última edición por destor77; 13/06/2008 a las 19:32
  #2 (permalink)  
Antiguo 14/06/2008, 12:29
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Respuesta: crear singleton

Hola Destor77 !

Fíjate que en la clase HT, el constructor es público, tienes que cambiarlo a privado para que no pueda ser instanciada diréctamente la clase.

También una cosa, dentro del constructor tienes las siguiente línea:

Código PHP:
$HT = new CHPPConnection('nukestats','/test'); 
No es necesario que crees una instancia de CHPPConnection si ya estas heredando de ella.

Código PHP:
class HT extends CHPPConnection {

        private static 
$instance null;
     
        private function 
__construct()  {
              
$config Config::singleton();
              
parent::__construct($config->param1$config->param2);
        }
     
        public static function 
singleton()  {

            if(
self::$instance == null)  {
                
self::$instance = new self();
            }
            return 
self::$instance;
        }
    } 
Un saludo !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #3 (permalink)  
Antiguo 14/06/2008, 20:45
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 6 meses
Puntos: 43
Respuesta: crear singleton

bueno al final lo resolví así:
Código PHP:
abstract class ControllerBase {
     
        protected 
$view;
        protected 
$ht;
     
        function 
__construct()
        {
            
$this->view = new View();
            
$this->ht= new CHPPConnection('nukestats','/test');
            
$this->ht->connectUser('destor77','f9f803c0');
        }
        

    } 
nose si es la mejor manera pero me anda perfecto, pero ahora tengo dos dudas:
1- cuando uso la instancia en algun controlador lo hago asi
Código PHP:
$this->ht->getEconomy()->getFans(); 
pero cuando empiezo a escribir el codigo y me vas desplegando el autocompletado llega hasta el ht y cuando agrego el -> ya no me muestra nada, en cambio antes de usarla como abastracta me mostraba todos los metodos que tenia clase, esto se puede modificar?

2- En una parte del sistema el usuario se puede loguear con sus datos, asi que esta parte:
Código PHP:
$this->ht->connectUser('destor77','f9f803c0'); 
deberá cambiar por los datos que pase el usuario en el form, si yo vuelvo a llamar a ese codido pero le paso los nuevos datos, tendré algun inconveniente?

desde ya muchas gracias
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 09:16.