|
Categorieën >
Object georiënteerd
FATAL ERROR:
RonsterS – 31/12/2007 13:36 (Laatst gewijzigd op 31/12/2007 13:38)
|
|
offline
|
Nieuw lid
|
HOi,
Ik heb een class die error moet gaan afhandelen, met volgende code
class MyMessages
{
public $messages;
public function __construct()
{
$this->messages = array();
}
public function addMessage($message)
{
$this->messages[] = array("message" => $message);
}
public function hasMessages()
{
return (count($this->messages) > 0);
}
public function getMessages()
{
return $this->messages;
}
}
class MyMessages { public $messages; public function __construct() { $this->messages = array(); } public function addMessage($message) { $this->messages[] = array("message" => $message); } public function hasMessages() { return (count($this->messages) > 0); } public function getMessages() { return $this->messages; } }
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 |
13 antwoorden
Wim – 31/12/2007 13:37 (Laatst gewijzigd op 31/12/2007 13:39)
|
|
offline
|
Crew algemeen
|
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';
|
|
|
|
offline
|
IRC nerd
|
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)
|
|
offline
|
PHP gevorderde
|
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)
|
|
offline
|
Nieuw lid
|
include_once("includes/base.inc.php");
include_once(WEBSITE_URI ."/classes/calendar.class.php");
$sAction = MyUtils::param("command"); // what do we want to show
$sYear = (MyUtils::param("year") == "" ? date("Y") : MyUtils::param("year"));
$sMonth = (MyUtils::param("month") == "" ? date("m") : MyUtils::param("month"));
$oCalendar = new Calender($sYear, $sMonth);
$sDate = MyUtils::param("date");
$sHasMessage = MyMessages::hasMessages();
switch ($sAction)
{
case "GETDATE":
if(isset($sDate) && $sDate != "")
{
$oTPL->assign("template", "pages/calendar/schedule.tpl");
$oTPL->assign("aSchedule", $oCalendar->loadschedule(MyUtils::param("date")));
}
else
{
$oTPL->assign("template", "pages/calendar/schedule.tpl");
if($sHasMessage)
{
foreach(MyMessages::getMessages() as $sValue)
{
$oTPL->assign("sError", $sValue['message']);
}
}
}
break;
default:
$oTPL->assign("template", "pages/calendar/calendar.tpl");
$oTPL->assign("getCal", $oCalendar->getMonthView(2));
}
$oTPL->display("basetemplate.tpl");
include_once("includes/base.inc.php"); include_once(WEBSITE_URI ."/classes/calendar.class.php"); $sAction = MyUtils::param("command"); // what do we want to show $sYear = (MyUtils ::param("year") == "" ? date("Y") : MyUtils ::param("year")); $sMonth = (MyUtils ::param("month") == "" ? date("m") : MyUtils ::param("month")); $oCalendar = new Calender($sYear, $sMonth); $sDate = MyUtils::param("date"); $sHasMessage = MyMessages::hasMessages(); switch ($sAction) { case "GETDATE": if(isset($sDate) && $sDate != "") { $oTPL->assign("template", "pages/calendar/schedule.tpl"); $oTPL->assign("aSchedule", $oCalendar->loadschedule(MyUtils::param("date"))); } else { $oTPL->assign("template", "pages/calendar/schedule.tpl"); if($sHasMessage) { foreach(MyMessages::getMessages() as $sValue) { $oTPL->assign("sError", $sValue['message']); } } } break; default: $oTPL->assign("template", "pages/calendar/calendar.tpl"); $oTPL->assign("getCal", $oCalendar->getMonthView(2)); } $oTPL->display("basetemplate.tpl");
dit is de pagina waarop de boel wil hebbe zegmaar.
en dan heb ik nog een apparte pagina waar ik
$oMyMessages = new MyMessages();
$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
|
|
offline
|
Crew algemeen
|
gebruik eens overal $oMyMessages-> ipv MyMessages::
|
timo – 31/12/2007 13:50
|
|
offline
|
PHP ver gevorderde
|
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
|
|
offline
|
Crew algemeen
|
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
|
|
offline
|
PHP ver gevorderde
|
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
|
|
offline
|
Crew algemeen
|
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)
|
|
offline
|
Nieuw lid
|
Volgens mij probeer je this-> te gebruiken terwijl je de methode statisch aanroept.
Je zal het dus iets moeten veranderen.
<?php error_reporting(E_ALL); ?>
<?php
class MyMessages
{
public $messages;
public function __construct()
{
$this->messages = array();
}
public function addMessage($message)
{
$this->messages[] = array("message" => $message);
}
public function hasMessages()
{
return (count($this->messages) > 0);
}
public function getMessages()
{
return $this->messages;
}
}
?>
<?php
$messages_o = new MyMessages();
// Are there messages?
var_dump($messages_o->hasMessages());
// Add a message
$messages_o->addMessage('test');
// Are there messages now?
var_dump($messages_o->hasMessages());
// Dump all messages
var_dump($messages_o->getMessages());
?>
<?php class MyMessages { public $messages; public function __construct() { $this->messages = array(); } public function addMessage($message) { $this->messages[] = array("message" => $message); } public function hasMessages() { return (count($this->messages) > 0); } public function getMessages() { return $this->messages; } } ?> <?php $messages_o = new MyMessages(); // Are there messages? // Add a message $messages_o->addMessage('test'); // Are there messages now? // Dump all messages ?>
|
Dit onderwerp is gesloten.
|
|
|