login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > Object georiënteerd

FATAL ERROR:

RonsterS – 31/12/2007 13:36 (Laatst gewijzigd op 31/12/2007 13:38)
HOi,

Ik heb een class die error moet gaan afhandelen, met volgende code

  1. class MyMessages
  2. {
  3.  
  4. public $messages;
  5.  
  6. public function __construct()
  7. {
  8. $this->messages = array();
  9. }
  10.  
  11. public function addMessage($message)
  12. {
  13. $this->messages[] = array("message" => $message);
  14. }
  15.  
  16. public function hasMessages()
  17. {
  18. return (count($this->messages) > 0);
  19. }
  20.  
  21. public function getMessages()
  22. {
  23. return $this->messages;
  24. }
  25. }



Nu krijg ik echter de volgende error

Fatal error: Using $this when not in object context in C:\xampp\htdocs\reloaded\mymessages.class.php on line 19

dit is lijn 19 $sHasMessage = MyMessages::hasMessages();

Wat houdt de foutmelding in en fout doe ik fout


Pagina:

13 antwoorden

Gesponsorde links
Daisycon - Verdien geld met uw website

Wim – 31/12/2007 13:37 (Laatst gewijzigd op 31/12/2007 13:39)
geef je ganse script eens

//edit:
je roept die functie uit de classe aan, maar je hebt nog geen instantie van die classe gecreerd -> geen $this object (zeker niet voor waardes, gezien $this de HUIDIGE instantie is).

Maak eerst een nieuw object aan dmv "new", en gebruik overal dat object:
$obj = new class();
$obj->functie();
$obj->var = 'value';

fluaju – 31/12/2007 13:38
yeah, lijkt me ook. Je geeft een stuk code, maar de fout zit ergens anders?  

avdg – 31/12/2007 13:39 (Laatst gewijzigd op 31/12/2007 13:39)
kun je ook de regels ervoor geven: dat maakt ons makkelijker om te volgen  

Edit: oei, er was al reactie 

RonsterS – 31/12/2007 13:39 (Laatst gewijzigd op 31/12/2007 13:40)
  1. include_once("includes/base.inc.php");
  2. include_once(WEBSITE_URI ."/classes/calendar.class.php");
  3. $sAction = MyUtils::param("command"); // what do we want to show
  4. $sYear = (MyUtils::param("year") == "" ? date("Y") : MyUtils::param("year"));
  5. $sMonth = (MyUtils::param("month") == "" ? date("m") : MyUtils::param("month"));
  6. $oCalendar = new Calender($sYear, $sMonth);
  7. $sDate = MyUtils::param("date");
  8. $sHasMessage = MyMessages::hasMessages();
  9. switch ($sAction)
  10. {
  11. case "GETDATE":
  12. if(isset($sDate) && $sDate != "")
  13. {
  14. $oTPL->assign("template", "pages/calendar/schedule.tpl");
  15. $oTPL->assign("aSchedule", $oCalendar->loadschedule(MyUtils::param("date")));
  16. }
  17. else
  18. {
  19. $oTPL->assign("template", "pages/calendar/schedule.tpl");
  20.  
  21.  
  22. if($sHasMessage)
  23. {
  24. foreach(MyMessages::getMessages() as $sValue)
  25. {
  26.  
  27. $oTPL->assign("sError", $sValue['message']);
  28. }
  29. }
  30. }
  31.  
  32. break;
  33. default:
  34. $oTPL->assign("template", "pages/calendar/calendar.tpl");
  35. $oTPL->assign("getCal", $oCalendar->getMonthView(2));
  36. }
  37. $oTPL->display("basetemplate.tpl");



dit is de pagina waarop de boel wil hebbe zegmaar.
en dan heb ik nog een apparte pagina waar ik

  1. $oMyMessages = new MyMessages();


aanroep

Ik gebruik zegmaar een base pagina die eigenlijk alle classes die de pagina altij nodig heeft aaanroept..

Wim – 31/12/2007 13:44
gebruik eens overal $oMyMessages-> ipv MyMessages::

timo – 31/12/2007 13:50
classNaam::functie() zal niet werken als je met de $this variabel werkt voor zover ik weet, maak gewoon een object aan en gebruik dat, aangezien $this = new classNaam

Wim – 31/12/2007 13:52
timo schreef:
classNaam::functie() zal niet werken als je met de $this variabel werkt voor zover ik weet, maak gewoon een object aan en gebruik dat, aangezien $this = new classNaam


dat laatste is dus compleet niet waar. Als je zoiets zou doen dan bekom je een instantie binnen een instantie van die classe (wat soms overigens wel nuttig kan zijn). Had je trouwens reply #1 gelezen had je hetzelfde antwoord gehad als dat je zelf nu geeft :/

timo – 01/01/2008 10:45
wimmarien schreef:
[..quote..]

dat laatste is dus compleet niet waar. Als je zoiets zou doen dan bekom je een instantie binnen een instantie van die classe (wat soms overigens wel nuttig kan zijn). Had je trouwens reply #1 gelezen had je hetzelfde antwoord gehad als dat je zelf nu geeft :/

wel toch , als ik doe:
$blaat = new Blaat;
dan is $blaat de externe versie van wat je binnen de class als $this gebruikt, want $this->foo is $blaat->foo, hangt natuurlijk nu af van private, protected en public, en binnen de class kan je niet $blaat gebruiken, maar zo werkt het wel..

Wim – 01/01/2008 14:08
jij zei in je vorige post dat $this een nieuwe instantie van hetzelfde object was, maar dat is niet. $this is gewoon de huidige instantie waar je in bezig bent

Vincjenzo – 02/01/2008 12:30 (Laatst gewijzigd op 02/01/2008 12:38)
Volgens mij probeer je this-> te gebruiken terwijl je de methode statisch aanroept.

Je zal het dus iets moeten veranderen.

  1. <?php error_reporting(E_ALL); ?>
  2. <?php
  3. class MyMessages
  4. {
  5. public $messages;
  6.  
  7. public function __construct()
  8. {
  9. $this->messages = array();
  10. }
  11.  
  12. public function addMessage($message)
  13. {
  14. $this->messages[] = array("message" => $message);
  15. }
  16.  
  17. public function hasMessages()
  18. {
  19. return (count($this->messages) > 0);
  20. }
  21.  
  22. public function getMessages()
  23. {
  24. return $this->messages;
  25. }
  26. }
  27. ?>
  28.  
  29. <?php
  30. $messages_o = new MyMessages();
  31.  
  32. // Are there messages?
  33. var_dump($messages_o->hasMessages());
  34.  
  35. // Add a message
  36. $messages_o->addMessage('test');
  37.  
  38. // Are there messages now?
  39. var_dump($messages_o->hasMessages());
  40.  
  41. // Dump all messages
  42. var_dump($messages_o->getMessages());
  43. ?>


Gesponsorde links


Pagina:

Dit onderwerp is gesloten.
Actieve forumberichten:

© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.154s