PDA

View Full Version : [PHP] oggetti in sessioni


ianaz
24-12-2006, 14:13
È possibile salvare un oggetto in una sessione senza sprecare risorse?
Mi spiego meglio:

io ho una classe language la quale carica da un file ini tutti i testi del sito.
I quali, quando ho bisogno li estraggo con


<?php
$lang = new language(); // Legge il file ini e salva in un array tutti i testi
echo $lang->getText('PAGE_TITLE', 'it'); // Estrae il testo che ho bisogno nella lingua specificata
?>



e se io invece di rileggere il file ini in ogni pagina lo salvo in sessione?


<?php
$_SESSION['lang'] = new language(); // Legge il file ini e salva in un array tutti i testi
echo $_SESSION['lang']->getText('PAGE_TITLE', 'it'); // Estrae il testo che ho bisogno nella lingua specificata
?>



In questo caso in ogni pagina avrei il mio testo di cui ho bisogno con un caricamento rapido (senza istanziare di nuovo la classe)?
Non spreca troppe risorse?
Qual'é il modo migliore per fare un sito in multilingua il più veloce e leggero possibile?

grazie :)

andbin
24-12-2006, 14:29
Io per il mio sito ho fatto una cosa molto semplice: per ogni pagina che necessita di essere multi-lingua ho scritto dei file php del tipo:

home_it.php
<?php
$lang_str['tools']="Strumenti";
$lang_str['documents']="Documenti";
?>
home_en.php
<?php
$lang_str['tools']="Tools";
$lang_str['documents']="Documents";
?>
Poi ho fatto una semplice funzioncina (che è in un file php sempre incluso in ogni pagina) del tipo:
function lang_source_file ($basename)
{
global $lang_str;

$filename = ...qui compongo il nome del file...

include $filename;
}

che richiamo ad esempio con lang_source_file("home");

La composizione del filename si basa, nel mio caso, su un path fisso a cui aggiungo il basename e poi un "it" o "en" che mi arriva da una variabile di sessione.

ianaz
24-12-2006, 14:33
Però da te li ricarica ad ogni pagina, invece con le sessioni no, o sbaglio?

ianaz
24-12-2006, 19:10
A quanto pare non si possono salvare oggetti nelle sessioni :(

Xalexalex
25-12-2006, 10:48
A quanto pare non si possono salvare oggetti nelle sessioni :(
Basta serializzarli http://www.php.net/serialize

ianaz
25-12-2006, 23:55
Basta serializzarli http://www.php.net/serialize
Con questo modo posso poi utilizzare

echo $_SESSION['language']->getText('title');


senza istanziare la classe?

Xalexalex
26-12-2006, 11:25
Devi prima "unserializzarla" :D e farla tornare un oggetto.
Ovviamente la classe di quell'oggetto deve essere dichiarata in quella pagina!
Ciaoz!

ianaz
26-12-2006, 11:33
Quindi ogni volta dovrei comunque eseguire delle operazioni pesanti giusto?
Tanto vale istanziare ogni volta la classe.


Grazie mille ;)