Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] OOP objecten en sessies...

Remytje
4 antwoorden
  • Hoi,

    ik heb de volgende opzet die ik wil realiseren:

    ik ben een winkelapplicatie aan het maken. Het moet mogelijk zijn om meerdere artikelen toe te voegen aan het winkelwagentje. Dit wil ik op de volgende manier doen:

    Ik maak een dataklasse Artikel met de nodige getters en setters. Ik heb een sessievariabele artikelen waarin ik een array met artikelen zet. De artikelen in de array zijn instanties van de klasse artikel. Deze bewaar ik dus in mijn sessie variabele.

    Deze array wordt goed doorgegeven in de sessievariabele. Ik zet dus de array uit de sessie variabele in een lokale variabele, ook dit gaat goed, ik heb dit gechecked met print_r en ik zie de juiste info terug.

    Het probleem is dat als ik mijn object (de instantie van de artikel klasse) in een lokale variabele zet en een methode hiervan aanroep, dat de parser dit niet zo fijn vind. ik krijg de volgende foutmelding:

    [i:70ef2aef98]Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>artikel</b> of the object you are trying to operate on was loaded _before_ the session was started in F:\WEBDESIGN\Projecten\zitten\bestellen_1.php on line 8[/i:70ef2aef98]

    Ik ben er even aan verdergegaan en ik heb geprobeerd het object uit te lezen middels print_r en kreeg het volgende resultaat:

    [i:70ef2aef98]__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => artikel [naam] => Remco [prijs] => [bekleding] => ) [/i:70ef2aef98]

    Maar het wordt er niet duidelijker op…

    Ik snap dat er iets mis is met het object dat ik wil aanspreken, maar wat er voor de rest staat….

    Ik hoop dat iemand anders mij hiermee kan helpen.

    alvast bedankt!!
  • Het bleek dat als je de sessie var (het object) wilt hergebruiken in een andere pagina, dat je eerst de klasse moet includen (had ik gedaan) en daarna nog een keer session_start() moet aanroepen. Dit omdat anders je object unserialized werd en dan heb je er dus niets meer aan.

    Het is helaas niet opgelost hiermee…

    Het bovenstaande werkt alleen maar als je echt naar een andere pagina gaat en niet als (zoals ik) andere pagina's in een div include…

    Iemand die hier een oplossing op weet?
  • Je kan de SESSION-array als een opslag plek zien, zoals een database. Je slaat de data van de artikelen op in de SESSION en bij de volgende request bouw je de artikelen opnieuw op mbv de data (dus geen objecten opslaan, maar data).

    Het makkelijkst om dit toe te passen, is door nog een object te creeeren: ShoppingBasket (winkelmandje).

    ShoppingBasket verzorgt het opslaan en ophalen uit je SESSION (en kan meer dingen doen zoals totaal berekenen, artikelen toevoegen/verwijderen, bestelling definitief maken, etc…).

    even een snel voorbeeldje:
    [code:1:27fecf8c12]$basket =& new ShoppingBasket();
    $article1 =& new Article(5432);
    $article2 =& new Article(5435);

    $basket->addArticle($article1);
    $basket->addArticle($article2);

    //volgende request:
    $basket =& new ShoppingBasket();
    $articles =& $basket->getArticles();
    $total = $basket->getTotal();
    $btw = $basket->getVAT();
    etc…[/code:1:27fecf8c12]

    Hopelijk heb ik je hiermee een duwtje in de 'goede' richting gegeven.

    -Rémy
  • Bedankt voor je antwoord.

    Dit is alleen geen oplossing van het probleem, ik ben bekend met de wijze van programmeren OOP (heb nogal wat ervaring in JAVA).

    Het probleem was als volgt:
    bij het verwisselen van pagina (of dit nu via een link gaat of via include dat maakt even niet uit) ging er iets fout: ik kreeg een php incomplete object error.

    Deze werd gegenereerd vanwege het feit dat als je in een sessie classobjects opslaat deze werden geserialiseerd bij een paginawissel. Dit komt omdat als er gewisseld wordt van pagina worden de sessie objecten gedeserialiseerd, dit gebeurde zonder de bijbehorende methoden.

    Dit veroorzaakte de error, de oplossing was vrij simpel, ik gebruik include in index.php, nu moet ik eerst boven mijn session_start() de klassen die ik gebruik (artikelen) includen dan krijg ik deze error niet meer.

    Zoals je ziet is het opgelost, iig bedankt voor je aand8

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.