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

Como saber la cantidad de instancias creadas de una classe

Estas en el tema de Como saber la cantidad de instancias creadas de una classe en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos. Tengo una clase en la que para manipular ciertos datos necesito saber la cantidad de objetos que se han creado de la ...
  #1 (permalink)  
Antiguo 31/05/2007, 17:46
 
Fecha de Ingreso: abril-2007
Mensajes: 144
Antigüedad: 17 años
Puntos: 4
Pregunta Como saber la cantidad de instancias creadas de una classe

Hola a todos.

Tengo una clase en la que para manipular ciertos datos necesito saber la cantidad de objetos que se han creado de la clase, y no se como hacerlo.

Ahora mismo lo tengo hecho con una variable gloval, ajena a la clase, la cual incremento en el constructor de la clase, asi cada vez que se crea un objeto se incrementa y puedo saber cuantos objetos hay creados.

Pero no me gusta mucho este sistema, no se si hay alguna forma de hacerlo de modo que este incluida en la propia clase.

Por desgracia mi servidor tiene PHP 4.6, con lo que funcionalidad de la POO no esta muy implementada. Necesitaria una solucion que se pudiera utilizar en PHP 4.6

Gracias.
  #2 (permalink)  
Antiguo 31/05/2007, 18:41
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: Como saber la cantidad de instancias creadas de una classe

Apenas te iba a decir que talves te ayudaria usar [IMG]Reflection[/IMG], pero es para la version 5..
Si alguna vez te cambias a 5; ya sabes que podria ayudarte, digo :" podria" por q no he leido todo el manual sobre reflection, y ahorita no tengo ganas de leerlo.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #3 (permalink)  
Antiguo 31/05/2007, 19:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como saber la cantidad de instancias creadas de una classe

Puedes usar un contador estatico:
Código PHP:
class prueba {
     function 
prueba() {
           static 
$contador;
           
           if( !
$contador ) {
                  
$contador 0;
           }

           
$contador++;
     }

  #4 (permalink)  
Antiguo 31/05/2007, 21:20
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: Como saber la cantidad de instancias creadas de una classe

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar un contador estatico:
Código PHP:
class prueba {
     function 
prueba() {
           static 
$contador;
           
           if( !
$contador ) {
                  
$contador 0;
           }

           
$contador++;
     }

static en PHP 4?No creo que exista.
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #5 (permalink)  
Antiguo 01/06/2007, 07:00
 
Fecha de Ingreso: abril-2007
Mensajes: 144
Antigüedad: 17 años
Puntos: 4
Re: Como saber la cantidad de instancias creadas de una classe

Si se permite static en PHP 4, pero dentro de una funcion de la clase, no como variable de la propia clase.

Ya pense en usar static, pero supuse que cada objeto tendria su variable static, que seria permanente, pero independiente en cada objeto , quiero decir que al crear un nuevo objeto se crearia una nueva variable static que empezaria con valor 0.

Por la naturaleza de 'static' pense que este seria su comportamiento, ahora, si dentro de una clase se considera static como estatica para la clase en lugar de para cada objeto, entonces si me sirve.

GatorV, ¿Como se podria hacer con static?

No se si llamando a la funcion de la clase (clase::funcion con static()) sin instancia, se crearia una static general de la clase, o me daria un error.
  #6 (permalink)  
Antiguo 01/06/2007, 07:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como saber la cantidad de instancias creadas de una classe

El static en PHP4 se comporta como lo esperas, es una variable estática general por clase, no por objeto asi que de esa forma puedes realizar un conteo de cuantas clases, ahora el problema es obtener el valor, ya que es estática para esa funcion (el constructor).

Si ves el source del SPAW editor, veras que ellos utilizan variables globales para saber la cantidad de objetos, te dejo un poco del source para que lo veas:
Código PHP:
// instance counter (static)
$spaw_wysiwyg_instCount 0;
$spaw_javascript_sent false;

class 
SPAW_Wysiwyg {
  
// controls name
  
var $control_name;
  
// controls unmodified name
  
var $original_name;   
  
// value
  
var $value;
  
// holds control toolbar mode.
  
var $mode
  
// editor dimensions;
  
var $height;
  var 
$width;
  
// language object
  
var $lang;
  
// theme (skin)
  
var $theme;
  
// editor stylesheet
  
var $css_stylesheet;
  
// toolbar dropdown data
  
var $dropdown_data;
  
// toolbars
  
var $toolbars;
  
  
// constructor
  
function SPAW_Wysiwyg($control_name='richeditor'$value=''$lang=''$mode '',
              
$theme=''$width='100%'$height='300px'$css_stylesheet=''$dropdown_data='')
  {
    global 
$spaw_dir;
    global 
$spaw_wysiwyg_instCount;
    global 
$spaw_default_theme;
    global 
$spaw_default_css_stylesheet;
    
    
$spaw_wysiwyg_instCount++; 
Es lo malo de PHP4, que tienes que hacer estas cosas que no son nada OOP, aunque yo si fuera tu buscaría un server con PHP5, para empezar a programar bien de 0 .

Saludos.
  #7 (permalink)  
Antiguo 01/06/2007, 10:01
 
Fecha de Ingreso: abril-2007
Mensajes: 144
Antigüedad: 17 años
Puntos: 4
Re: Como saber la cantidad de instancias creadas de una classe

Exactamente asi lo he implementado yo en my clase, pero me gusta mas la idea de usar static, porque al hacerlo con global siempre cabe la posibilidad de modificar la variable por error en otra parte del codigo.
Ya se , esto se resuelve poniendole un nombre largo a la variable, o que empieze por '___' como hice yo en mi codigo '___numObjClass = 0 '.

Creo que he resuelto el problema de acceso a la variable static, sin perder la proteccion del ambito de la clase.

Este es un ejemplo:

Código PHP:
class prueba
{
    var 
$contador;
    
    function 
prueba()
    {
        static 
$contador;
        
$this->contador =& $contador;
        
$this->contador++;
        
        echo 
"constructor: {$this->contador} <br>";
    }
    
}

/ *************  
Pruebas  **************/
$a = new prueba();   
$b = new prueba();
echo 
"contador en \$a: ".$a->contador."<br>";
echo 
"contador en \$b: ".$b->contador."<br>";
$c = new prueba();
echo 
"contador en \$a: ".$a->contador."<br>";
echo 
"contador en \$b: ".$b->contador."<br>";
echo 
"contador en \$a: ".$c->contador."<br>"
De esta forma tengo una unica variable static a la que puedo acceder desde la propiedad 'contador' de cualquier objeto, pero el ambito queda limitado solo a los objetos de esta clase.

De todas formas revisarme el codigo porque como las referencias de PHP no son lo mismo que los punetros de C, todabia me hago un poco de lio cuando trabajo con referencias.
  #8 (permalink)  
Antiguo 01/06/2007, 14:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como saber la cantidad de instancias creadas de una classe

Me parece perfecta tu idea, asi queda mas limpio el código y protegida dentro de la variable.

Por cierto el uso de =& esta perfecto asi copias la referencia a la variable.

Saludos.
  #9 (permalink)  
Antiguo 30/06/2007, 13:58
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Como saber la cantidad de instancias creadas de una classe

Hola, que tal. Queria hacer una pregunta sobre el metodo prueba.

static $contador;
$this->contador =& $contador;
$this->contador++;

Entiendo el funcionamiento o eso creo.

supongamos:
$contador (el atributo de la clase)
$contador_static (atributo static del metodo)

En un principio:
Código:
      $contador ---------> ----------------
                          |     null       |
                           ----------------

      $contador_static  ---------> ----------------
                                  |        0        |
                                    ----------------
entonces la sentencia: $this->contador =& $contador_static , lo que hace es cambiar la referencia (flecha) de $contador apuntado, ahora, a $contador_static

despues $contador++, se incrementa, inicialmente a 0, pasa a 1. y como las dos variables apuntan a la misma CAJA (posicion de memoria) la variable static tambien apunta al valor incrementado.

correcto??

Mi pregunta es la siguiente: ¿Por qué hacer eso? y no directamente incrementar el static?

Saludos
  #10 (permalink)  
Antiguo 01/07/2007, 00:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como saber la cantidad de instancias creadas de una classe

El problema es que las variables estaticas dentro de una funcion son unicas, y si luego queremos "leer" esa variable, la unica forma de hacerlo es hacerla global, y para tener algo un poco "limpio", y poder leer la variable al mismo tiempo por eso la almacenamos en una variable de la clase.

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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:16.