Usar metodos de php enviando desde js

LR

Se que el titulo no es del todo preciso, asi que a ver si me explico bien y me podeis echar una mano... seguramente sea algo sencillote de hacer pero no se me ocurre :S

En php tengo una clase mas o menos asi

    class MiClase extends ClasePadre
    {
        $variables

    __construct()

    estilo()

    inicializado()

    imprimir()
    {
        if(inicializado) {
            parent::inicializar();
            self::inicializado();
        } else {
            parent::avanzar();
        }

        $progreso= parent::progreso();
        $estilo = self::estilo();

        return array_merge($progreso, $estilo);
    }

}

Lo que estoy intentando hacer es instanciar la clase para cargar los valores por defecto y demas y luego ir invocando imprimir() pasandole valores con ajax y usar el array que devuelvo.

El problema es que no se me ocurre como hacerlo.

Las opciones que se me han ocurrido son:

1.- Instanciar la clase en el php al que mando datos desde ajax, cosa que no serviria porque me crearia un objeto nuevo cada vez que enviase datos.
2.- Instanciarlo en el php desde el que uso ajax y luego donde envio los datos invocar el metodo, cosa que tampoco serviria porque la instancia estaria creada en el index
3.- Sesiones/Cookies, pero no creo que sea la forma mas eficiente de hacerlo...

Alguna idea de cual es la mejor forma de hacer esto?

jalamoNNN

Te juro que por más que lo leo no entiendo casi nada de lo que dices.
De todas formas no sé si tienes claro lo que es AJAX, pero por si acaso te lo explico a muy grandes rasgos. Básicamente es una metodología que afecta al lado del cliente, es decir, al navegador. Concretamente, te permite mantener una comunicación asíncrona (en segundo plano, sin recargar la web en el navegador). No tiene nada que ver con la parte del servidor, es más, en principio el servidor ni se entera de si estás usando comunicación asíncrona o síncrona.

1 respuesta
LR

#2 si si, se como va.

A ver si puedo explicarlo mejor...

Tengo mi clase y lo que quiero es una de estas 2 cosas:

  • Usar el metodo que comento arriba cuando haga algo en la web, ya sea un click, change, lo que sea.

  • Hacer que cada 'x' segs compruebe si el servidor ha hecho algo, en caso de que lo haga, ejecutar el metodo.

En ambos casos quiero mostrarlo de forma asíncrona por eso digo de tirar usando ajax.

Creo que ahora esta mejor explicado.

El problema es lo que digo arriba, como hago para poder usar el metodo y que todo el estado de la clase siga intacto?

1 respuesta
Mujiwara

Utiliza WebSockets en vez de AJAX para solventar el problema de ir instanciando la clase en cada petición diría yo

1 respuesta
O

Lo que tu necesitas es un Singleton.
Busca como implementar esto en php.

Saludos y suerte.

1 respuesta
txandy

#1 Son ejecuciones separadas, así que no puedes usar clases estaticas ni nada por el estilo, no creo que se puede hacer así de manera directa.

Tendrías que guardar el objeto en la primera petición en algún sitio, como tu dices session/mysql/redis y luego recuperarlo.

Petición AJAX -> Comprobar si tengo un objeto inicializado -> Si lo tengo cargalo sino instancio nuevo -> Guardar objeto -> Servir petición.

Es lo que se me ocurre para solucionar ese problema.

#5 Singleton no, eso cuando es una misma ejecución, en este caso serán x ejecuciones.

2 respuestas
O

#6 Toda la razón, en diferentes hilos de ejecución no tiene sentido :(

La única solución es tener algo de cache como te comenta.

jalamoNNN

#3 vale, ya lo comprendo.
No puedes guardarte el estado en atributos de php, porque no es un registro persistente. Como te han dicho en #6 puedes guardarlo en base de datos o session.

LR

#4 #5 #6 #8 thx por la ayuda.

#4 Les echare un ojo a ver si consigo algo por ahi que creo que es lo que mas se adapta a lo que quiero.

#6 De esas opciones que ya contemplaba y por lo que dices tu, lo unico "util" serian las sesiones.

Realmente la clase es una tonteria, solo dibuja una barra de progreso y va marcando lo que ya se ha ejecutado y lo que se esta ejecutando. Como digo, una gilipollez, pero lo que quiero es que sirva para todo, tanto para un simple formulario de registro por ejemplo, como para seguir el progreso de una instalacion de "x" paquete o ejecuciones en el propio servidor y ver en tiempo real diferntes avances (ejecuciones por lotes, memoria usada en el server, lo que sea), a fin de cuentas, en todos los casos es lo mismo, asignarle un progreso y pintar la barra.

Por eso mi idea era no depender de bases de datos, sesiones ni nada de eso, para hacerlo lo mas "limpio" posible por decirlo de alguna manera y consumir cuantos menos recursos mejor.

Creo que le echare un ojo a los websockets a ver si por ahi saco algo, si no, no quedara mas remedio que tirar de sesiones.

1 respuesta
DarkSoldier

#9 sockets como bien dice #4 o en cada petición pides lo nuevo desde la fecha X

Usuarios habituales