Foros del Web » Programando para Internet » PHP »

Llamar a clase estatica por referencia en una sola linea

Estas en el tema de Llamar a clase estatica por referencia en una sola linea en el foro de PHP en Foros del Web. Primero que nada doy mis cordiales saludos. Este es mi primer tema en este foro y al verdad es que no soy muy forero pero ...
  #1 (permalink)  
Antiguo 31/08/2010, 20:02
 
Fecha de Ingreso: junio-2010
Mensajes: 10
Antigüedad: 14 años, 4 meses
Puntos: 0
Llamar a clase estatica por referencia en una sola linea

Primero que nada doy mis cordiales saludos.
Este es mi primer tema en este foro y al verdad es que no soy muy forero pero tengo un temita que por mas que busco no puedo solucionar.

Tengo una clase estatica Core con un metodo Service.

Este metodo me devuelve una referencia a otra clase estatica.

Código PHP:
Ver original
  1. $mi_servicio = Core::Service('MiServicio');

Esto funciona sin ningun problema ya que puedo llamar a los miembros estaticos de dicho servicio de la siguiente manera:

Código PHP:
Ver original
  1. $mi_servicio::metodoDeMiServicio();


El punto es como puedo hacer para traer el servicio y ejecutar el método en una misma línea. Algo como esto me da error:

Código PHP:
Ver original
  1. Core::Service('MiServicio')::metodoDeMiServicio();

Me devuelve el siguiente error:

Código:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM 
Aunque encontré información del error no pude resolver como solucionarlo.

Si puedo hacerlo si recibo un objeto en vez de una referencia a clase estática que sería algo como esto:
Código PHP:
Ver original
  1. Core::System('MiObjeto')->MetodoDeMiObjeto();

El motivo de buscar esto es que actualmente tengo un sistema de c# que realiza esa función y me gustaría portar la misma forma de trabajo a este nuevo sitio en PHP. En C# se llamo a los servicios de la siguiente manera:

Código C++:
Ver original
  1. Core.Service.getService<MiServicio>.MetodoDeMiServicio();

Este es utilizado por cualquiera de mis clases sin necesidad de volverlo a instanciar.

Desde ya muchas gracias por cualquier ayuda que puedan darme.
  #2 (permalink)  
Antiguo 31/08/2010, 20:07
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Llamar a clase estatica por referencia en una sola linea

No es posible en php. Tendrás que hacer algun tipo de wrapper
__________________
Perros y cachorros
  #3 (permalink)  
Antiguo 31/08/2010, 20:57
 
Fecha de Ingreso: junio-2010
Mensajes: 10
Antigüedad: 14 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Llamar a clase estatica por referencia en una sola linea

Cita:
Iniciado por LoveMeNot Ver Mensaje
No es posible en php. Tendrás que hacer algun tipo de wrapper
ahah. Que respuesta veloz.

Bueno hice que la clase no sea estatica, la instancie y la devolvi.

Queda como

Código PHP:
Ver original
  1. Core::Service('Servicio')->Metodo();

Service implementa Singleton asi que nunca se va a instanciar dos veces la clase y en un directorio meto los *.php con las clases que obtienen Singleton de forma transparente.

Guardo cada servicio en un array y luego si existen los devuelvo. Si no existen los instancio.

Ahora solo me queda ver si con shm puedo llegar a mantener los objetos compartidos entre todos los usuarios pero ese es otro tema que ni en c# pude.

Muchas muchas gracias por la atención.
  #4 (permalink)  
Antiguo 31/08/2010, 22:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos
  #5 (permalink)  
Antiguo 03/09/2010, 14:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Llamar a clase estatica por referencia en una sola linea

hola soy nuevo en php tengo una duda

class Persona {

private static $instancia;
public static function getInstance () {
if (!isset(self::$instancia)) {
$obj = __CLASS__;
self::$instancia = new $obj;
}
return self::$instancia;
}
}
class Alumno extends Persona{
}

echo get_class(Persona::getInstance()).'<br>';
echo get_class(Alumno::getInstance()).'<br>';

resultado
Persona
Persona

quisiera que escribir codigo para que el resultado de
Persona
Alumno

Muchas gracias
  #6 (permalink)  
Antiguo 03/09/2010, 16:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Llamar a clase estatica por referencia en una sola linea

No se puede heredar como tal el patrón singleton, tienes que volverlo a declarar en tus clases hijas para eso.

Saludos.
  #7 (permalink)  
Antiguo 03/09/2010, 17:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Llamar a clase estatica por referencia en una sola linea

Cita:
Iniciado por GatorV Ver Mensaje
No se puede heredar como tal el patrón singleton, tienes que volverlo a declarar en tus clases hijas para eso.

Saludos.
Ok... voy a hacer eso..
muchas gracias por tu ayuda.
  #8 (permalink)  
Antiguo 08/09/2010, 09:33
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: Llamar a clase estatica por referencia en una sola linea

si no lo que puedes hacer es una clase donde se implemente el singleton y que todas tus clases la implementen

Etiquetas: clase, estatica
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 10:26.