WillY- Skrevet 16. februar 2012 Forfatter Del Skrevet 16. februar 2012 Tror jeg venter litt med å sette meg inn i aggregering og komposisjon Men skal ikke se bort ifra at jeg får bruk for eksempelet senere kgun Et spørsmål: $obj = & $_SESSION['objects]['cCourse']; $obj->setWhatevz($var); Vil det endre SESSION direkte som en referanse? Bare litt tungvindt og måtte skrive $_SESSION['objects]['cCourse']->setWhatevz($var) for hver gang Sikker på at du ikke bør revurdere designet ditt en smule? I mitt hode virker det nok å ta vare på informasjon som kan identifisere brukeren og tilhørende data. Jeg ville heller lagret svar på kurs, poengsummer og lignende i en database. Det må da være enklere enn dette du gjør nå? Jo alt ligger i databasen, og oppdateres når det er gjort endringer på objektet. Poenget var liksom å redusere queries, OG ha et objekt jeg bare kan hente informasjonen direkte fra, f.eks cUser->getTotalPoints() henter ikke direkte fra databasen, men det som er lagra i objektet, som er det samme som ligger i databasen. Meneh.. her kommer et lite problem, og det er å sørge for at objektet til enn hver tid har den samme informasjonen som i databasen Men har gått fint så langt ihvertfall. Her har du objektene Course denne inneholder all informasjon om kurset, men INGEN bruker stats User denne har BARE bruker stats (består bare av arrays, men skulle EGENTLIG lagd subobjekter til denne også, som i Course) Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Tror jeg venter litt med å sette meg inn i aggregering og komposisjon Men skal ikke se bort ifra at jeg får bruk for eksempelet senere kgun Du vet hva Ibsen sa, Det er viljen som teller, den frigjøre eller den feller og kanskje enda mer aktuelt: Utsett aldri til i morgen det du kan gjøre i dag. Ett av mine favoritt sitater er fra Einstein: Make it simple, as simple as possible but no simpler. I den digitale tidsalder ville jeg endret det siste til. Gør det så enkelt og sikkert som mulig, men ikke enklere og sikrere. Gjør du det ikke sikkert nok i utgangspunktet, kan du ende opp med utgått ("depricated") kode ved neste php oppdatering. Eksempler: PDO + Prepared statements om du jobber med databaser. (php) cURL om du jobber med konsumering av webtjenester og import av php scripts. Er du det man vil kalle en ungdom, antar jeg at du leser kode som andre leser donald. Endret 16. februar 2012 av Slettet+9871234 Lenke til kommentar
WillY- Skrevet 16. februar 2012 Forfatter Del Skrevet 16. februar 2012 Altså... sikkert kjempe flott å begynne rett på algebra, men jeg vil helst lære meg å bruke gange og dele først.... Lenke til kommentar
Gjest Slettet+9871234 Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 Vet du hva? Jeg synes mye i matte blir lettere jo mer generelt det er. Matrisealgebra gjør behandling av simultane ligningssystemer mye lettere. Husk at matrisgruppen ikke er abelsk. Dvs. AB = BA bare for symmetriske matriser. Der finnes ferdige bibiloteker til dette i Python hvor man også har såkalt generalisrte inverser. Til dette foretrekker jeg Python fremfor PHP. PHP er språket til å lage web steder er min personlige overbevisning. Lenke til kommentar
xibriz Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Giddet ikke å lese alt her.. men har noen kommet opp med noen forslag som funker? Slik ville jeg har gjort det: $myObject = new myObject(); //Dette trenger jeg å vite på ett senere tidspunkt $myObject->setName("Tor"); $_SESSION['myObject'] = serialize($myObject); På ett senere tidspunkt: //Jeg trenger myObject fra forrige side... $myObject = unserialize($_SESSION['myObject']); $name = $myObject->getName(); .... //Endrer jeg objektet må jeg også oppdatere det i sesjon $myObject->setAge(45); $_SESSION['myObject'] = serialize($myObject); Eller serialiser og lagre informasjonen i en fil hvis det er sensitiv informasjon. Endret 16. februar 2012 av xibriz 3 Lenke til kommentar
WillY- Skrevet 17. februar 2012 Forfatter Del Skrevet 17. februar 2012 @xibriz Ja det blir noe sånt. Men jeg hadde håpa på å kunne slippe og måtte serialize/unserialize, og bare oppdatere session direkte. Først må jeg finne ut om det virkelig er nødvendig eller ikke, som noen sier.. Lenke til kommentar
Shetil Skrevet 17. februar 2012 Del Skrevet 17. februar 2012 (endret) //Abstract klasse som alle klasser som skal lagres i session kan bruke abstract class SessionObject{ //Henter objektet fra session static function init($id){ return unserialize($_SESSION[get_called_class()][$id]); } //Lagrer objekt i session når det ikke er flere referanser til det public function __destruct(){ $_SESSION[get_called_class()][$this->id] = serialize($this); } } class Course extends SessionObject{} //Henter objektet fra session $course = Course::init($_GET['id']); Koden over er utestet og jeg vet ikke om jeg ville ha gjort det slik selv. Ellers synes jeg det er rart at flere har nevnt memcache men ingen her nevnt apc. Med apc kan du lagre objekter i minne og i tillegg vil den kraftig forbedre ytelsen på din applikasjon. Endret 17. februar 2012 av Shetil 1 Lenke til kommentar
FraXinuS Skrevet 17. februar 2012 Del Skrevet 17. februar 2012 Giddet ikke å lese alt her.. men har noen kommet opp med noen forslag som funker? Slik ville jeg har gjort det: $myObject = new myObject(); //Dette trenger jeg å vite på ett senere tidspunkt $myObject->setName("Tor"); $_SESSION['myObject'] = serialize($myObject); På ett senere tidspunkt: //Jeg trenger myObject fra forrige side... $myObject = unserialize($_SESSION['myObject']); $name = $myObject->getName(); .... //Endrer jeg objektet må jeg også oppdatere det i sesjon $myObject->setAge(45); $_SESSION['myObject'] = serialize($myObject); Eller serialiser og lagre informasjonen i en fil hvis det er sensitiv informasjon. Det er unødvendig å bruke serialize/unserialize, php fikser det selv. Og så lenge du bruker PHP5 så vil objecter som ligger i $_SESSION automatisk holdes oppdatert, så lenge du ikke cloner dem. $myObject = new myObject(); //Dette trenger jeg å vite på ett senere tidspunkt $myObject->setName("Tor"); $_SESSION['myObject'] = $myObject; //Jeg trenger myObject fra forrige side... $myObject = $_SESSION['myObject']; $myObject->setAge(45); $myObject = $_SESSION['myObject']; $myObject->getAge() == 45; 1 Lenke til kommentar
Sono Juventino Skrevet 17. februar 2012 Del Skrevet 17. februar 2012 (endret) (Kode) Koden over er utestet og jeg vet ikke om jeg ville ha gjort det slik selv. Ellers synes jeg det er rart at flere har nevnt memcache men ingen her nevnt apc. Med apc kan du lagre objekter i minne og i tillegg vil den kraftig forbedre ytelsen på din applikasjon. Absolutt ikke helt på jordet. Det minte meg på noe. Det vil nok være lurere å bruke PHPs innebygde magiske metoder for å løse dette. Jeg snakker selvsagt om __sleep() og __wakeup(). Sleep og wake up er automagiske, på samme måte som __construct() eller __toString(). Kall - Metode som kjøres: $obj = new Object() - kaller __construct(); echo $obj; - kaller __toString(); serialize($obj); - kaller __sleep(); unserialize($obj); - kaller __wakeup(); Ville derfor implementert det noe som dette: class Course extends SessionObject { // Setter id på objektet. F. eks tilsvarende ID som i en database eller som i "cCourse" private $id; // Metoden returnerer objektets id public function getId() { return $this->id; } // Kjøres ved serialize() public function __sleep() { $_SESSION[get_class()][$this->id] = serialize($this); return array_keys(get_object_vars($this)); // dette er sånn php gjør det innvendig. // Også mulig å lagee til db/andre eventualiteter } // Kjøres ved unserialize() public function __wakeup($id) { return unserialize($_SESSION[get_class()][$id]); } } // Lage objektet $course = new Course(); // Lagre objektet serizalize($course); $course = unserialize($_GET['id']); Min kode er heller ikke testet. Les mer om __sleep() og __wakeup() om det ikke skulle funke. Kan hende jeg misforsto, men sto også noe om at bare public attributter vil kunne serializeres. Godt mulig du må implementere grensesnittet Serializable. Det er jeg litt usikker på. I så fall finner du info her Endret 17. februar 2012 av Sono Juventino 1 Lenke til kommentar
WillY- Skrevet 18. februar 2012 Forfatter Del Skrevet 18. februar 2012 Den var ikke dum! Det er hvertfall en god løsning hvis det jeg skulle ende opp med _PHP_incomplete_object. Gjorde noen teste uten å serialize, og det gikk jo uten problemer. Men vet jo aldri om det vil oppstå noe senere. Skulle gjerne likt å vite hva som forårsaker _PHP_incomplete_object problemet. Jeg får ta en test med private attributter også.. Men hva er det egentlig folk vanligvis gjør når man kaller på php med ajax? F.eks i en poll. SELECTER/UPDATER dem bare dataen direkte i php scriptet som blir kalt..? Lenke til kommentar
FraXinuS Skrevet 18. februar 2012 Del Skrevet 18. februar 2012 (endret) For å unngå _PHP_incomplete_object må du passe på å inkludere alle classe definisjoner som blir brukt før du prøver å bruke objectene. session_start(); require 'class1.php'; $_SESSION['class1_object']->test(); Endret 18. februar 2012 av FraXinuS Lenke til kommentar
Sono Juventino Skrevet 19. februar 2012 Del Skrevet 19. februar 2012 Regner med at du bruker __autoload()? Den fungerer, sånn jeg har forstått det, bare hvis man bruker det reserverte ordet new. Som FraXinuS sier, prøv å includere manuelt om det ikke skulle funke. Lenke til kommentar
dahuff Skrevet 19. februar 2012 Del Skrevet 19. februar 2012 (endret) Sikker på at du ikke bør revurdere designet ditt en smule? I mitt hode virker det nok å ta vare på informasjon som kan identifisere brukeren og tilhørende data. Jeg ville heller lagret svar på kurs, poengsummer og lignende i en database. Det må da være enklere enn dette du gjør nå? Jo alt ligger i databasen, og oppdateres når det er gjort endringer på objektet. Poenget var liksom å redusere queries, OG ha et objekt jeg bare kan hente informasjonen direkte fra, f.eks cUser->getTotalPoints() henter ikke direkte fra databasen, men det som er lagra i objektet, som er det samme som ligger i databasen. Meneh.. her kommer et lite problem, og det er å sørge for at objektet til enn hver tid har den samme informasjonen som i databasen Men har gått fint så langt ihvertfall. Dersom dette gjelder anonyme brukere, så er det ikke noen god ide å bruke sessions som cache fordi du får en lokal fil på serveren per bruker som ikke blir borte når de ikke behøves mer. Med mange besøkende er det ikke sikkert at dette er bedre enn å kjøre noen ekstra spørringer mot database. Vi (utviklere) gjetter som regel feil om hvor det lønner seg å optimalisere koden (!), eller hvordan optimalisere for ytelse i dette tilfellet. Jeg ville heller godtatt noen flere spørringer mot database, og senere begynt å cache mest mulig for anonyme brukere og annet som er felles for alle besøkende. Har du ett ytelsesproblem med innloggede brukere (hvor det er naturlig å bruke sessions/cookies for å kjenne igjen bruker og lign.), ville jeg også vurdert designet først og så sett på sessions som ett av alternativene. Endret 19. februar 2012 av dahuff Lenke til kommentar
WillY- Skrevet 20. februar 2012 Forfatter Del Skrevet 20. februar 2012 Fant en bra artikkel om dette! http://www.devshed.com/c/a/PHP/Working-with-MySQL-and-Sessions-to-Serialize-Objects-in-PHP/1/ "..Over this series, I covered not only the fundamentals of object serialization in PHP, but also some advanced topics, such as the implementation of the magic “__sleep()” and “__wakeup()” functions, and the usage of objects in sessions. Finally, I completed the series by demonstrating how to store serialized objects in MySQL tables,.." For å unngå _PHP_incomplete_object må du passe på å inkludere alle classe definisjoner som blir brukt før du prøver å bruke objectene. session_start(); require 'class1.php'; $_SESSION['class1_object']->test(); Åja, jeg trodde _PHP_incomplete_object var et problem som kom av å ikke serialize. Det har hvertfall kommet mye opp i denne sammenhengen, av det jeg har lest. Dersom dette gjelder anonyme brukere, så er det ikke noen god ide å bruke sessions som cache fordi du får en lokal fil på serveren per bruker som ikke blir borte når de ikke behøves mer. Med mange besøkende er det ikke sikkert at dette er bedre enn å kjøre noen ekstra spørringer mot database.Hmm ok. Snakker vel om endel brukere da? Men nå krever jeg login da heldigvis.. Vi (utviklere) gjetter som regel feil om hvor det lønner seg å optimalisere koden (!), eller hvordan optimalisere for ytelse i dette tilfellet. Jeg ville heller godtatt noen flere spørringer mot database, og senere begynt å cache mest mulig for anonyme brukere og annet som er felles for alle besøkende. Har du ett ytelsesproblem med innloggede brukere (hvor det er naturlig å bruke sessions/cookies for å kjenne igjen bruker og lign.), ville jeg også vurdert designet først og så sett på sessions som ett av alternativene. Mulig jeg har hengt meg litt for mye opp i å ikke ha for mange queryies Men å hente samme data flere ganger virker ganske unødvendig. Mye vil vel løse seg med sånn memcache greier? Akkurat nå kan jeg ingenting om det.. Ett lite spørsmål: $obj = & new Object($param); Hva er egentlig poenget med referanse der? Skjønner viss det er "$obj = & $someObject" for da er det en direkte referanse, men referanse til "new" skjønner jeg ikke helt Lenke til kommentar
FraXinuS Skrevet 20. februar 2012 Del Skrevet 20. februar 2012 Ikke bruk referanser, du trenger stort sett aldri å bruke det. Lenke til kommentar
WillY- Skrevet 20. februar 2012 Forfatter Del Skrevet 20. februar 2012 Ikke? Jeg tenkte å bruke det til SESSION f.eks $cCourse = & $_SESSION['objects']['cCourse']; , så jeg oppdaterer SESSION også når jeg endrer $cCourse Lenke til kommentar
FraXinuS Skrevet 20. februar 2012 Del Skrevet 20. februar 2012 Hvis $cCourse er et object så trenger du ikke bruke referanse. Lenke til kommentar
WillY- Skrevet 20. februar 2012 Forfatter Del Skrevet 20. februar 2012 $cCourse = $_SESSION['objects']['cCourse'] $cCourse->setName("name") vil ikke oppdatere $_SESSION['objects']['cCourse'], uten referense Lenke til kommentar
FraXinuS Skrevet 20. februar 2012 Del Skrevet 20. februar 2012 (endret) Jo, objekter er automatisk referanser if PHP5. Bare uten sideeffektene av å bruke &. Endret 20. februar 2012 av FraXinuS Lenke til kommentar
WillY- Skrevet 20. februar 2012 Forfatter Del Skrevet 20. februar 2012 Jeg gjorde en test med og uten &, og den ble ikke oppdatert i SESSION uten &. Jeg bruker PHP 5.3.4. Hvordan skulle man isåfall lage en kopi av objektet da hvis det alltid er referanse?(om man måtte trenge det, heh) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå