Newsgroup: it.comp.www.php
Titolo: sulla programmazione a oggetti e sulla persistenza dei dati

Salve a tutti :)
lavoro con PHP da parecchi anni ormai, sempre in modo procedurale e solo 
sfiorando il PHP object-oriented.
Premetto che lavoro con PHP4.
Ora, poniamo di voler realizzare un'applicazione che, tra le varie richieste 
HTTP, tenga traccia di una variabile e la incrementi ogni volta.
Facilissimo: utilizzo una variabile di sessione, e la incremento ogni volta 
stampandola a schermo.
<?php
 session_start();
 if(!isset($_SESSION["turno"])){
  $_SESSION["turno"] = 0;
 }
 $turno = $_SESSION["turno"];
 echo "Turno: " . $_SESSION["turno"]++;
 echo "<br>";
 echo "<a href=\"index.php\">GO</a>";
?>
ecco, se io volessi realizzare questa cosa tramite una classe, che dovrebbe 
presentarsi così:
class Game {
 var $turno;
 // COSTRUTTORE
 function Game() {
  echo "è iniziato il gioco.<br>";
  $this->turno = 0;
 }
 function display(){
  echo "Turno: " . $this->turno;
 }
 function passaTurno(){
  $this->turno++;
 }
}
mi sembra che fin qui non ci piova. Ma nel codice della pagina, come dovrei 
procedere?
Ragionando tramite altri linguaggi (come il c++) si creerebbe una variabile 
di tipo Game e poi si entrerebbe in un loop che ogni volta stamperebbe a 
video il valore della variabile turno.
$g = new Game();
while( condizione )
    // stampa la var turno
end while
Il problema è che col php il ciclo è già implicito nel fatto di richiamare 
la pagina index.php ogni volta.
Quindi, dovrò certamente creare un oggetto di tipo Game (ma solo la prima 
volta).
Come si fa per conservare lo stato della variabile $g (ovvero l'oggetto 
Game) ogni volta che la pagina viene richiamata?


Mi cascano le braccia :-(
Ci fosse ancora Setec ti prenderebe a linkate di manuale php sulla schiena
:)
... ma come?
Dopo anni che lavori in php non sai che puoi salvare in sessione anche
istanze di classi, volgarmente dette oggetti?
Vatti a leggere il manuale và ...
DrMarKuse

 Game) ogni volta che la pagina viene richiamata?
Istanzi l'oggetto come una variabile di sessione. Stai attento a php4 
quanto ri-assegni gli oggetti: se non specificato, vengono assegnati per 
valore e non per riferimento:
$a = new Class();
$a->var = 6;
$_SESSION['obj'] = $a;
$a->var = 7;
Avrai:
	$_SESSION['obj']->var ======> 	6
	$a->var		=======>	7
Francesco

grazie per le risposte :)
uhm, sì in effetti non mi sono spiegato bene io; più che altro il mio 
problema è di tipo concettuale.
Ovvero: salvare l'oggetto nella sessione è il modo migliore per procedere?
anche perchè se dovessi avere un oggetto MOOLTO grande.. potrebbero sorgere 
dei problemi passandolo ogni volta?
In questi casi come si procede?
Potrei utilizzare un DB per salvare lo stato della mia applicazione ogni 
volta. Ma anche qui ogni volta una miriade di leggi/salva e di query al 
database.. forse è peggio.
Ho visto che ci sono librerie per la persistenza degli oggetti.. come 
funzionano concettualmente?
oppure.. si imposta lo script in un altro modo?
"Mister" <pippo@pippo-com> ha scritto nel messaggio 
news:4747bdd1$0$37202$4faf...@reader3.news.tin.it...


 $a->var =======> 7
grazie :) 

 database.. forse è peggio.
Le variabili di sessione vengono memorizzate (per default) su file di 
testo, se vuoi puoi ridefinire l'handler della sessione per scrivere su 
db ma il concetto non cambia.
Ovviamente, al session start il contenuto della sessione 
(indipendentemente dal backend di memorizzazione) viene caricato in 
memoria quindi, per assurdo, se hai istanziato un oggetto da 10 Mbyte, 
in sessione avrai una var da 10 Mbyte.
Qualsiasi altro marchingegno che inventi, ti porterà sempre ad avere 
un'allocazione di 10Mbyte in memoria, ammesso che non "spezzetti" 
l'oggetto in diverse parti (serializzandolo su db, per esempio), e di 
tirar su le varie parti all'occorrenza.
Per la giusta soluzione, valuta quante volte e in che modo accedi 
all'oggetto e decidi dove metterlo, ovviamente per un risparmio di 
memoria "inline" avrai una maggior richiesta su DB/FS e viceversa.
	Francesco