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;
}
}
//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';
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
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 :/
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..
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
<?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());
?>
Wat Vincjenzo zegt klopt: als je een class statisch aanroept maak je geen instantie van de class en kan je dus geen $this gebruiken.
Wat je wel kunt doen is je class statisch maken. Dan zet je static in plaats van public voor $messages en maak je verder overal van $this->messages self::$messages.
Jij roept de functie hasMessages op alsof het static is. Static wordt niet gebruikt als die methode gebruik maakt van de eigenschappen van de class.
Je kan je eigenschappen static maken, maar dat is een onhandige keuze omdat die eigenschappen niet lang static blijven. Wat je wel als static kan beschouwen zijn class constantes.
Static kan je gebruiken wanneer je methodes maakt voor je class die niet gebruikt maakt van de class eigenschappen.
Je kan je eigenschappen static maken, maar dat is een onhandige keuze omdat die eigenschappen niet lang static blijven. Wat je wel als static kan beschouwen zijn class constantes.
Volgens mij klopt het niet helemaal wat je zegt, en ik heb nog wat aan te vullen.
De waarde van zo'n eigenschap wordt door php onthouden als je hem static gebruikt. Als je een instantie van de class maakt kan je de statische waarden niet gebruiken. Dat is ook logisch want een instantie maak je juist om een uniek object aan te maken:
Een constante kan niet veranderen en is dus sowieso statisch maar een static kan wel veranderen en is dus geen constante. Een constante kan je alleen op de statisch manier oproepen.