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

Singleton y herencia

Estas en el tema de Singleton y herencia en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, tengo una dudilla. Tengo una clase abstracta, la cual quiero que tenga un metodo tipo getInstance para aplicar Singleton. El problema es que no ...
  #1 (permalink)  
Antiguo 18/02/2007, 18:00
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Singleton y herencia

Buenas, tengo una dudilla. Tengo una clase abstracta, la cual quiero que tenga un metodo tipo getInstance para aplicar Singleton. El problema es que no encuentro la manera de hacer funcionar el singleton en las clases que heredan de esta primera... sin tener que sobreescribir el metodo. Por si no se entiende, pongo codigo que tengo hecho:

Código PHP:
<?php
interface Individuos
{
    static function 
getInstance();
    function 
initialize$data );
}

abstract class 
Personas implements Individuos
{
    protected 
$name;
    protected static 
$instance;
    
    protected function 
__construct()
    {
    }
    
    public static function 
getInstance() {
        if ( ! 
self::$instance )
        {
            
$class get_class();
            echo 
$class//sale Personas
            
self::$instance = new $class();
        }
        return 
self::$instance;            
    }
    
    public function 
initialize($data)
    {
        
$this->name $data["name"];
    }
}

class 
Hombre extends Personas
{
}

$data = array('name' => 't');
$tb Hombre::getInstance();
$tb->initialize$data );
?>
Lo intente con get_class(), pero me devuelve el nombre de la clase abstracta (como esta ahora) y claro, me tira error por querer instanciar una clase abstracta. Solo deseo que por ejemplo la clase Hombre tenga un metodo para recueprar una unica instancia del objeto, y que este metodo sea heredado, o sea que no lo quiero escribir en cada una de las clases que heredan de Personas.

Alguna solución o alternativa?


Muchas gracias
__________________
Federico.

Mi página: www.jourmoly.com.ar

Última edición por Fridureiks; 18/02/2007 a las 19:24
  #2 (permalink)  
Antiguo 18/02/2007, 18:19
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Singleton y herencia

Prueba inicianizando tu variable $instance a null, luego en tu metodo pregunta asi
Código PHP:
protected static $instance =null;

public static function 
getInstance() {
if(
self::$instance== null){
           
$class get_class();
            echo 
$class//sale Personas
            
self::$instance = new $class();
        }
        return 
self::$instance

__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.

Última edición por B**; 18/02/2007 a las 18:25
  #3 (permalink)  
Antiguo 18/02/2007, 18:28
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Singleton y herencia

Gracias B**, pero tengo los mismos problemas. Basicamente aqui:

Código PHP:
<?php
            $class 
get_class();
            echo 
$class//Personas en lugar de Hombre
            
self::$instance = new $class();
?>
Cuando quiero buscar una instancia de Hombre que hereda de la clase abstracta Personas, en vez de devolverme una instancia de Hombre, intenta crear una instancia de Personas y esto arroja error.

Quiza la salida sea otra cosa y no el singleton, agradezco sugerencias.


Habia pensado pasar por parametro el nombre de la clase que quiero crear, pero no me gusta mucho la idea:

Código PHP:
<?php
$data 
= array('name' => 't');
$tb Hombre::getInstance("Hombre");
$tb->initialize$data );
?>
__________________
Federico.

Mi página: www.jourmoly.com.ar

Última edición por Fridureiks; 18/02/2007 a las 18:34
  #4 (permalink)  
Antiguo 18/02/2007, 18:38
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Singleton y herencia

Código PHP:
<?php
            $class 
= new self();
            echo 
$class
            
self::$instance = new $class();
?>
EDIT : olvide poner los parentesis en self
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.

Última edición por B**; 18/02/2007 a las 18:49
  #5 (permalink)  
Antiguo 18/02/2007, 19:19
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Singleton y herencia

Gracias nuevamente, pero ocurre el mismo error

Fatal error: Cannot instantiate abstract class Personas in C:\Archivos de programa\xampp\htdocs\www\poo\logogenesis\interfac e.php on line 21

Linea 21: $class = new self();

Al parecer cuando hago esto:

$tb = Hombre::getInstance();

toma self como Personas y no como Hombre :(


Cita:
Iniciado por Manual
De hecho las llamadas a métodos static son resueltas en tiempo de ejecución. Cuando sea explícitamente un nombre de clase, el método ya ha sido identificado completamente y no es necesario aplicar las reglas de herencia. Si la llamada es hecha por self entonces self es traducido a la clase actual, esto es, la clase a la que pertenece el código. Aquí tampoco aplican las reglas de herencia.


Bueno esto me aclara el panorama, creo que tengo que buscar otra manera de resolver esto.


Saludos y muchas gracias B**
__________________
Federico.

Mi página: www.jourmoly.com.ar

Última edición por Fridureiks; 18/02/2007 a las 19:30
  #6 (permalink)  
Antiguo 18/02/2007, 22:31
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Singleton y herencia

Código PHP:
     self::$instance = new Hombre();
     print 
get_class(self::$instance);//imprime "Hombre" 
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #7 (permalink)  
Antiguo 19/02/2007, 08:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Singleton y herencia

Tu problema (volvemos a los conceptos) es que si llamas a una funcion heredada desde otra, self, se refiere a la clase original, no a la heredada, esto es por diseño, si quieres implementar el singleton, lo mas correcto es implementarlo en cada clase que lo necesite, el singleton no esta hecho para que sea heredado asi tan facil, ya que crearia errores imaginate, que tienes varias clases que heredan a tu clase mayor "singleton" cualquier instancia que hagas con getInstance() se referiria a la primera clase que fue creada.
  #8 (permalink)  
Antiguo 19/02/2007, 09:37
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Singleton y herencia

Luego de leer lo del manual lo comprendi y con esta explicacion aun mas. Muchas gracias, al final queda el singleton en cada clase.

Saludos y gracias otra vez.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #9 (permalink)  
Antiguo 14/03/2007, 15:42
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: Singleton y herencia

Alguien me podria proporcinar la liga en donde puedo encontrar el uso de singleton dentro del manual de php.net o bien alguna otra liga que me introduzca al tema. Gracias,


Saludillos.
  #10 (permalink)  
Antiguo 14/03/2007, 17:43
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Singleton y herencia

http://phpsenior.blogspot.com/2005/0...singleton.html
Haciendo promocion al blog de enriqueplace..jaja
De hecho si buscas en google:"singleton" te sale mucha informacion :S.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #11 (permalink)  
Antiguo 14/03/2007, 17:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Singleton y herencia

Singleton es un concepto OOP, te recomendaria que buscaras en Google sobre el patron Singleton, despues de esto podras implementarlo muy facil en PHP.
  #12 (permalink)  
Antiguo 15/03/2007, 08:21
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Re: Singleton y herencia

Cita:
Iniciado por B** Ver Mensaje
http://phpsenior.blogspot.com/2005/0...singleton.html
Haciendo promocion al blog de enriqueplace..jaja
De hecho si buscas en google:"singleton" te sale mucha informacion :S.
Me avisan de la administración que puedes pasar por caja a cobrar tu cheque.

PD: No me puedo hacer responsable por todos mis admiradores "gay" que hay en el foro
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 07:42.