Moro
Mietin tuossa että onko mahdollista php:ssä tehdä siten, että omasta luokasta tehdään instassi, sille annetaan parit arvot ja talletetaan sessio muuttujaan myöhempää käyttöä varten?
koitin sitä tuossa testailla mutta sain seuraavan virheilmoituksen:
object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition
mikäs tässä mättää?
Niin siis tallennetaan sessiomuuttujaan, eikä sessio muuttujaan? Eipä ole tullut vastaan moista virheilmoitusta, anna koodia niin parempi sanua. Kyllähän tuo on ihan mahdollista.
Moi
Sain ratkaistua asian...
esim.
<?php $esim = new MyClass(); // uusi instanssi $esim->SetFname('testi'); // laitetaan etunimi $esim->SetLname('hemppa'); // laitetaan sukunimi $_SESSION['MyClassInSessio'] = serialize($esim); // tallennetaan session ?>
SetFname ja SetNname tallentavat niille annetut arvot luokka muuttujiin.
sitten kun browsailemme sivua ees sun taas ja jossakin kohtaa tahdomme uudestaan käyttää ks. instanssia niin:
<?php $esim = unserialize($_SESSION['MyClassInSessio']; $esim->PrintFname(); // Tulostaa testi $esim->PrintLname(); // Tulostaa hemppa ?>
Toivottavasti muilleki valoitti asiasta kiinnostuneita
Sen verran tuosta koodista, notta funktiot ja muuttujien nimet suositellaan kirjoitettavan pienellä alkukirjaimella. Taulukon indekseistä sanoisin samaa, ellei niitä sitten kirjoita kokonaan isolla (kuten esim. SCRIPT_NAME). Noinhan se menee, kiinnostaisi vielä tietää, missä kohdin tuo virhe sitten tuli? Mietin vain, että kuinka PHP tiesi muuttujan olevan luokan instanssi, jos käyttö tapahtui eri sivulla, kuin tuo sessioon laittaminen. Ja puhut nyt "sivusta" ("browsailemme sivua ees sun taas"), tarkoitatko sivustoa? Koska jos sivua ei ladata uudelleen, serialisointiin ja sessioon tallentamiseen ei ole juuri tarvetta. Niin ja, "luokkamuuttujiin", vaikkei se nyt kyllä hyvä termi olekaan. Plussaa hienoista set-metodeista :).
hehe, kiitoksia.
juu tosi olet nimeämis käytännöstä, ja termit ei ole välttämättä oikeat mutta ...you get the point.
virhe tuli yksinkertaisesti siitä että jäi tuo serializointi tai unserializointi pois ja valitti siitä....ja tarkoitin nimenomaan tuota sivustoa , eli vaikka jonku kotisivuja ja sieltä klikkaillaan jonku sisältöä...
tosin ajatukseksi tuli, että onko hyödylisempää tehdä tuollainen luokka joka tallettaa sivustolle tulleen henkilön surffaus asetukset(browseri, javascript, flash, etc.) ja luokan instanssi tallennetaan sessiomuuttujaan ja sitä käytetään siellä missä tarvista VAIKO aina vertaillaan ks. asetuksia koodissa tapauskohtaisesti????
Eli kyseessä oli jonkin sortin testisivu, jossa samalla sivulla (ts. samalla suorituskerralla) ensin ajoit muuttujan serializen läpi, jonka jälkeen unohdit ajaa sen unserializen läpi ennen kuin yritin käyttää sitä objektina? Hyödyllisyydestä en osaa paljoa sanoa - ainakin silloin se on hyödyllistä, kun sama tieto joudutaan rakentamaan, hakemaan (esim. tietokannasta) usealla eri sivulla. Jos nyt taas tarkoitit sitä, että kannattaako nuo tiedot säilöä luokkaan vai ihan sessiotaulukkoon suoraan, niin en taaskaan osaa sanoa paljoa. Jos tietoja on paljon, ja käpristelet sillä user-objektilla paljon, niin kaipa se on silloin ihan kätevä. Ja onhan se erittäin pop :). Saman objektin voi säilöä vaikkapa kantaan, jos kyseessä on sivusto, jolle rekisteröidytään! Objektien kanssa leikkiminen ei pitäisi enää nykyään olla toivottoman hidasta, joten mikäli sivustosi ei ole mikää IRC-galleria, ei tästä luultavasti synny pullonkaulaa.
Niin ja aiheeseen liittyen, etsiessäni tuossa tietoa asiasta, näin jossakin mainittavan seuraavaa. Luokat tulee määritellä ennen sesion_startin kutsumista, jotta luokkien metodit olisivat käytettävissä. Mikäli nyt joku eksyy tätä threadiä lukemaan etsiessään vastausta tuommoiseen ongelmaan. Tai sitten jos luokan nimi ei palaudu oikein, kyse voi olla juurikin samasta asiasta - varsinkin käytettäessä php.inin asetusta session.auto_start
.
Jeps
Eli asia oli niin että en ajanut sitä unserializea...
Ite mietin tuota hyödyllisyyttä kaverini kanssa, hän väittää toista ja minä toista....eli klassinen nörttien tappelu :D.
Hän oli huolissaan resurssien loppumisesta mutta itse olin toista mieltä.
Tosin kumpikaan ei tiedä onko oikeassa vai väärässä :D....tai voiko sitä noin ajatella.
Aihe on jo aika vanha, joten et voi enää vastata siihen.