- Home
- Categorie
- Coding e Sistemistica
- PHP
- oggetti in pagine diverse?
-
oggetti in pagine diverse?
Ciao a tutti, volevo domandare se un oggetto istanziato in una "pag1.php" può essere utilizzato anche in una "pag2.php" o deve essere istanziato nuovamente (volevo utilizzare una classe che mi gestisce il database...). O comunque c'è un modo per "passare" l'oggetto fra le pagine?Grazie in anticipo
-
Ciao owen,
l'istanza va ricreata ad ogni accesso in una pagina.
-
Io volevo creare la tipica classe per la gestione del database e pensavo di fare il mio oggetto $db... per i parametri di connessione non c'è problema (li inizializzo nel costruttore cos' ogni volta che instanzio lo fa) ma per la var $attiva che vorrei usare per controllare se la connessione è già aperta oppure no come faccio a passarmela di pagina in pagina?
-
A cosa serve la variabile $attiva?
Da come ho capito, $attiva definisce lo stato della connesisone al server sql.
Se utilizzi una classe che inizializza una connessione al server sql, non ti serve sapere se la pagina precedente ha oppure no, avviato una connessione.
Se non usi connessioni persistenti, php interrompe la connessione sql al cambio di pagina.
Ti consiglio inoltre di aggiungere un distrutture alla classe, tipo questo:function __destructor() { @mysql_close($this->link); }
Ciao!
-
ah ok allora i controlli su $attiva ogni volta sono inutili! io avevo pensato di usare due metodi per apertura e chiusura connesione ($db->connect() e $db->(close)) ma tu mi suggerisci di mettere già nel costruttore la connessione e nel distruttore la chiusura e in questo modo (se la mia ignoranza non mi fa sbagliare) quando istanzio l'oggetto viene aperta la connessione e quando cambio pagina viene chiusa?
-
Si, così puoi fare una cosa del genere:
$db = new MySQL("host", ...);
quando istanzio l'oggetto viene aperta la connessione e quando cambio pagina viene chiusa? -> SI
Oppure la connessione la crei in un metodo separato.
$db = new MySQL();
$db->connect("host", ...);A te la scelta.
Ciao!
-
uhm... ci rifletterò: devo capire se conviene aprire e chiudere subito dopo la singola operazione o lasciarla aperta fino alla chiusure della pagina... non c'è qualche rischio lasciando aperto?
-
Quando un utente richiede la pagina, il server web preleva la pagina dalla memoria.
Trovando l'estensione php, la passa all'interprete php che genera il codice html.
Infine il codice html viene spedito al browser del cliente.
Quindi, il tempo di esecuzione dello script php è diverso dal tenere aperta la pagina sul browser.
La connessione sql viene fatta da server web a server mysql e non dal browser del cliente verso il server mysql.
-
questo significa che quando l'interprete fornisce l'html che ha prodotto al server, lo script è concluso quindi la connessione è già automaticamente chiusa anche senza inserire un mysql_close();?:?
-
Se non inserisci mysql_close() la connessione, per motivi di sicurezza, viene terminata poco dopo l'elaborazione, mentre se lo inserisci viene chiusa all'atto dell'interpretazione della funzione.
Comunque, una volta generato l'intero codice html, l'esecuzione è terminata, così come viene interrotta la connessione con il server web, che a sua volta interrompe la connessione con il server sql.
-
ok grazie mille!
-
Prego!
-
ah un'altra domanda! se ho```
<?php//istanzio la classe db che col costruttore effettua la connessione
$db= new db();
//query varie poi NON faccio la chiusura di connessione//istanzio la classe user,per funzioni sue effettua anch'essa una connessione ma non con la classe db (supponiamo)
$user=new $user();
$user->metodo();
?>come agisce in questi casi il server?
-
Al termine dell'esecuzione dello script, tutte le connessioni vengono chiuse automaticamente.
-
però lascio una connessione aperta e, all'interno dello stesso script, rientro creando una nuova connessione... no crea qualche tipo di conflitto?
-
...e un errore mi è capitato che non capisco...
PAGINE:- pippo.php (pagina che carico),
- db.php (contiene la classe per il database),
- squadra.php(contiene la classe per gestire la squadra dell'utente);
pippo.php contiene un "include(db.php);" in quanto ho bisogno di usare l'oggetto e anche squadra.php ha un include uguale perchè alcune funzioni accedono al db: purtroppo mi da errore in db.php dicendo che non posso replicare l'oggetto. Ho provato a togliere tutti i riferimenti all'oggetto ma basta l'include a causare l'errore...:?
-
Usa include_once al posto di include, così non fa di nuovo l'include se lo ha già fatto.
-
@owen said:però lascio una connessione aperta e, all'interno dello stesso script, rientro creando una nuova connessione... no crea qualche tipo di conflitto?
e questo esempio si può fare senza causare dei problemi?
-
Io a seconda dei casi cerco di strutturarmi gli script in modo tale da effettuare la connessione una volta sola, oppure aprire e chiudere nello stesso contesto ogni connessione.
Comunque in teoria non dovrebbe creare conflitti.E' come se io e te accedessimo allo stesso database, nello stesso momento, utilizzando lo stesso user: mysql lo permette.
Certo che se riesci a strutturare lo script per connetterti una volta sola è meglio e velocizzi anche il tutto...