login  Naam:   Wachtwoord: 
Registreer je!
 Forum

lege objectvariabelen

Offline walldorff - 14/06/2007 06:44 (laatste wijziging 14/06/2007 08:39)
Avatar van walldorffNieuw lid In een applicatie heb ik 4 classes:
- Registry
- Db
- User
- Form

Er zijn 2 belangrijke criteria:
- Het Form moet (bepaalde) class vars in User kunnen veranderen.
- De User moet ik in alle scripts kunnen aanroepen, compleet met de gewijzigde variabelen intact, zoals deze in Form zijn aangebracht, zodat ik daaruit data kan lezen.

In Registry berg ik Db en User op als singleton (ook nog maar net geleerd ).
De class Form wordt bij elk form aangeroepen met new Form.
Zowel class User als class Form kunnen Db aanroepen in een class var en in Form zit een class var, die het User-object bevat.

Nu het vreemde.
Ik laat de gebruiker inloggen en redirect hem na succes.
Alleen: als ik dan een instantie van User uit Registry haal, dan zijn alle variabelen van User pleite.
Hier een versimpelde versie (die dus ook niet werkt).

Waar kijk ik nou overheen?

Bedankt alvast voor de hulp.

Roland


Registry:
http://www.plaatscode.be/5642/
Form:
  1. <?php
  2. class Form {
  3. var $user;
  4. function Form() {}
  5.  
  6. public function test() {
  7. $this->user->id = 6; // voor de test
  8. $this->user->loginSuccess();
  9. }
  10. } // end class
  11. ?>

User:
  1. <?php
  2. class User {
  3. var $id;
  4. var $loggedIn;
  5. function User() {}
  6.  
  7. function loginSuccess() {
  8. $this->loggedIn = true;
  9. }
  10. } // end class
  11. ?>

Login:
  1. <?php
  2. include_once 'inc.class.registry.php';
  3. include_once 'inc.class.form.php';
  4. echo '<html><head><title>login</title></head><body>';
  5. $oUser = &getUser();
  6. $oForm = new Form;
  7. $oForm->user = $oUser;
  8. $oForm->test();
  9. header('location: doeiets.php');
  10. echo '</body></html>'; // komen we nooit
  11. ?>

doeIets:
- Is oUser een object? => JA
- Heeft $oUser een id? =>NEE
- Is $oUser ingelogd? => NEE
  1. <?php
  2. include_once 'inc.class.registry.php';
  3. echo '<html><head><title>doeiets</title></head><body>';
  4. $oUser = &getUser();
  5. echo 'DOEIETS.PHP<br />';
  6. echo '===========<br />';
  7. echo 'Is $oUser een object? ' . (is_object($oUser) ? 'JA' : 'NEE') . '<br />';
  8. echo 'Heeft $oUser een id? ' . ($oUser->id ? 'JA' : 'NEE') . '<br />';
  9. echo 'Is $oUser ingelogd? ' . ($oUser->loggedIn ? 'JA' : 'NEE') . '<br />';
  10. echo '</body></html>';
  11. ?>

3 antwoorden

Gesponsorde links
Offline marten - 14/06/2007 08:36 (laatste wijziging 14/06/2007 08:47)
Avatar van marten Beheerder Ik denk dat ik een oplossing weet.
Ik ben dit systeem nu tegengekomen bij het aanmaken van sessies en cookies en daarna een header location uit te voeren.

Probeer eens voor je header location de functie PHP.net: session_write_close te zetten. Probeer het hierna nog eens. Als dat niet lukt hoor ik het wel.

Citaat:
Het Form moet (bepaalde) class vars in User kunnen veranderen.


Dan kan je het beste de form class extenden. Dus
  1. <?php
  2.  
  3. class Form extends User {
  4. var foo;
  5. }
  6. ?>

Offline Thomas - 14/06/2007 10:10
Avatar van Thomas Moderator Hm, het lijkt mij niet de bedoeling dat je in object A (Form) rechtstreeks de waarden van object B (User) kunt aanpassen, dit is absoluut niet de bedoeling van OOP. Je zult een methode moeten schrijven die dit doet. Deze methode kun je dan wel binnen object A aanroepen, om een variabele in object B een waarde te geven.

Ik zou na een redirect-header exit() zetten.
Offline walldorff - 14/06/2007 17:30 (laatste wijziging 14/06/2007 17:57)
Avatar van walldorff Nieuw lid Tis opgelost met serialize/unserialize.

In User:
  1. <?php
  2. function loginSuccess() {
  3. $this->loggedIn = true;
  4. $oSelf = serialize($this);
  5. $_SESSION['user'] = $oSelf;
  6. header('location: doeiets.php');
  7. exit();
  8. }
  9. ?>


en in doeIets.php
  1. <?php
  2. $oUser = unserialize($_SESSION['user']);
  3. echo 'DOEIETS.PHP<br />';
  4. echo '===========<br />';
  5. echo 'Is $oUser een object? ' . (is_object($oUser) ? 'JA' : 'NEE') . '<br />';
  6. echo 'Heeft $oUser een id? ' . ($oUser->id ? 'JA' : 'NEE') . '<br />';
  7. echo 'If Ja, wat is dat id dan? ' . $oUser->id . '<br />';
  8. echo 'Is $oUser ingelogd? ' . ($oUser->loggedIn ? 'JA' : 'NEE') . '<br />';
  9. ?>


Bedankt allebei!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.254s