Domanda

Sono stato rovistando in PHP per la programmazione orientata agli oggetti e ho notato una cosa ... Gli oggetti vengono ri-istanziati ogni volta che la pagina viene aggiornata. Il problema è che voglio l'oggetto di mantenere alcune informazioni in variabili di classe per tutto il tempo che qualcuno si trova su un sito web.

  1. C'è una sorta di modo per mantenere un opporsi in vita per tutto il tempo che qualcuno sta navigando sul sito?
  2. Quali alternative ci sono al mio problema?

Sarebbe davvero utile avere esempio troppo!

È stato utile?

Soluzione

PHP non è stateful. Ogni pagina di carico è un evento di una volta. Si può persistere i dati con le sessioni, o memorizzando le informazioni in un database.

Altri suggerimenti

È possibile utilizzare Sessions per mantenere i dati associati a un utente tra le diverse pagine (citando) :

  

Il supporto delle sessioni in PHP è costituito da una   nel mantenere certi dati attraverso   successivi accessi.

Vedere la gestione della sessione sezione del manuale, per maggiori informazioni su sessioni .

Uno script php deve uscire prima di apache può servire alla pagina, quindi se si vuole veramente fare questo, una cosa che puoi fare è serializzare e memorizzare tutti gli oggetti che si desidera a persistere e utilizzare sessione i cookie per tenere traccia degli utenti

  1. PHP non è statefull ogni richiesta è un nuovo processo sul server

La cosa migliore è quella di utilizzare i dati di sessione e consegnare i dati della sessione per gli oggetti quando li si crea un'istanza. Hanno le Case costruttrici di estrarre i dati di cui hanno bisogno dalla sessione, e avrete in sostanza, hanno la pienezza dello stato è necessario.

è possibile acess sesion usando

$_SESSION['stuff'] = $data;

è possibile utilizzare gli oggetti come $ X = new DataStore ($ _ [ 'roba'] SESSIONE);

se ci sono i dati della sessione l'oggetto in sé popolare da tali dati. In caso contrario, questo verrà impostato a standard init.

Anche quando approcci come serializzazione di oggetti e poi li deserializzazione è utile, si deve essere sicuri di capire prima perché gli oggetti "scompaiono".

HTTP, il protocollo utilizzato per recuperare pagine e altre risorse di server Web, è stateless . Significa fondamentalmente una richiesta non sa nulla da un'altra richiesta, anche quando si è trattato dallo stesso utente. Pensate in questo modo, quando si richiede la pagina PHP, lo script viene eseguito e dopo aver finito di Apache invia il risultato a voi. Quando si richiede nuovamente la pagina, si fa la stessa cosa come se fosse la prima volta che l'avete fatto. E 'senza stato.

Non ci sono tecniche per mantenere lo stato tra le richieste (ne fanno per non dimenticare gli oggetti) e quelli coinvolgono cose come biscotti o la riscrittura degli URL. Ma devi tenere a mente la natura stateless di HTTP (e quindi il tuo script PHP) nello sviluppo di applicazioni Web.

SESSIONS sono buone, io uso loro di mantenere lo stato oggetto in alcuni dei miei programmazione PHP.

O una soluzione migliore sarebbe quella di utilizzare Flex in modo che non si deve preoccupare il protocollo HTTP stateless ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top