Hola:
Quiero saber si es posible conocer si una clase ha sido instanciada y si es posible, obtener referencias a esas instancias.
Todo esto sabiendo sólo el nombre de la clase.
Saludos
| ||||
En realidad lo que quiero es: Tengo una clase "Ejemplo". Necesito que cada una de las instancias de "Ejemplo" conozca (posea una referencia) a todas las otras instancias que pueda tener esa clase. Saludos |
| ||||
Lo que no quiero es hacer una clase adicional que maneje las instancias de mi clase "Ejemplo" Ahora no tengo PHP5 y por lo tanto no puedo hacer pruebas... ¿Podría hacer algo así? Código PHP: Última edición por jpinedo; 16/01/2005 a las 14:24 |
| ||||
Supongo que no está bien mezclar accesos a atributos estáticos y métodos no estáticos.... Tal vez sea una mejor idea tener una variable global que sea un array que guarda las referencias y que ese array se actualice desde el constructor de la clase. Saludos |
| |||
Si te entiendo bien, lo que quieres hacer es tener un lugar comun de donde hacer referencia de una clase ya instanciada para no tener que volver a crearla. Si es asi, puedes usar el patron singleton que se asegura de devolverte una istancia nueva solo si no hay ya una existente. Ahora que si tu problema es tener una relacion de todas las istancias de clase que hay durante la ejecucion de tu script posiblemente almacenar la referencia del objeto en un arreglo sea la solucion o implementar la interface Iterator de php5 o crear una para php4. Para el primer caso una implementacion del Singleton en php5 podria ser la siguiente; Código PHP: Si esto no es lo que estabas preguntando pues una disculapa por el choro mareador que escribi jejeje. |
| ||||
Hola Herminio... gracias por responder. Justamente buscando respuesta a mi pregunta dí con la explicación del Singleton que hay en el manual de PHP ( y aproveché para 'lanzar' una taducción y postearla aquí, en la traducción que inició Calisco ).... como siempre, has hecho una explicación impecable... pero mi pregunta iba más bien por el segundo caso que enuncias. Lo que quería era, en la medida de lo posible, que el usuario no tenga que instanciar más que mi clase "Ejemplo" (las veces que necesite) y que cada instancia pueda "ver" a todas sus "hermanas" automáticamente... No sé si el iterador se pueda instanciar desde dentro de la clase "Ejemplo"... Para hacerlo, tal vez en ese iterador pueda utilizar un Singleton para que sea creado sólo cuando se instancie "Ejemplo" por primera vez y las otras instancias de "Ejemplo" no creen un iterador nuevo sino que utilicen el que creo la primera. En realidad lo que sé del iterador es casi nulo... por eso antes de seguir hablando estupideces (¿?) voy a estudiarlo un poco... Ya regreso. (opinen con confianza) Saludos Última edición por jpinedo; 17/01/2005 a las 22:01 |
| |||
Si puedes. La ventaja es que en php5 ya tienes iteradores los cuales puedes implementar o extender dependiendo de lo que necesites. Por ejemplo para el caso que estas pidiendo puse la inicializacion de la clase ArrayIterator que ya esta predefinida en php5 como parte de la Standard Php Library ( es recomendable darse una vuelta por ese manual ). Asi que a partir del ejemplo que ya habia puesto en el mensaje anterior podemos hacer algo como lo siguiente (tomalo como ejemplo didactico ) Código PHP: |
| ||||
Gracias Herminio... es justamente eso a lo que me refería Cita: Claro que yo no tengo esa facilidad para explicar las cosas (bueno, debe ser también porque aún no las tengo tan claras)...
Iniciado por jpinedo No sé si el iterador se pueda instanciar desde dentro de la clase "Ejemplo"... Para hacerlo, tal vez en ese iterador pueda utilizar un Singleton para que sea creado sólo cuando se instancie "Ejemplo" por primera vez y las otras instancias de "Ejemplo" no creen un iterador nuevo sino que utilicen el que creo la primera. Muchas gracias por el ejemplo tan ilustrativo. Bueno... nada más que decir... a seguir estudiando y empecemos por el enlace a la Standard Php Library que dejaste. Gracias otra vez. Saludos |
| ||||
Bueno... ha pasado algún tiempo y debido a otro post regresé a este. Después de leer el ejemplo de Herminio una vez más y tener todo claro.... simplemente cambiaría una cosita que no afectaría el funcionamiento pero sí puede confundir un poco al resto de usuarios que lo lean. Código PHP: Un saludo |