Excuus, ik bedoelde dus runtime (on the fly) variabelen aanmaken.
[size=xsmall]Toevoeging op 18/06/2013 13:58:19:[/size]
@Anthony
Dat komt omdat als je eerdere code de view load de variable nog niet gevuld is, doe je dat in de constructor, of je draait het om, dan is dat wel.
Neemt niet weg dat je niet goed bezig bent met de scope van vars.
Ik zou je aanraden om je eigenschappen (properties) te declareren.
Dus iets als
<?php
class TESS_view {
public $naam; // eigenschap declareren
public function __construct() {
...
}
}
?>
Dan zou je notice "Notice: Undefined property: TESS_view::$naam in..." niet krijgen.
Het geeft je ook een mooi overzicht van alle eigenschappen die je zal nodig hebben.
----
En zoals Ger hier boven zegt, eventueel ook de eigenschappen een initiële waarde geven in de constructor.
Je kan ook nog __get en __set gebruiken. Dan moet je wel alle variabelen die je daar binnenkrijgt opslaan in een array, maar dat is ook niet zo heel moeilijk.
<?php
class TESS_view {
private $data;
public function __set($name, $value)
{
$this->data[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} else {
throw new Exception('Undefined property ' . $name);
}
}
}
?>
Wat jij deed was eerst de pagina laden en vervolgens een variabele toevoegen. Dat werkt niet. Je moet eerst de variabele toevoegen en daarna pas de pagina laden. Als je gaat auto rijden, moet je eerst de sleutel van het contactslot omdraaien en dan pas gas geven. Als je eerst gas geeft en daarna pas de sleutel omdraait dan gebeurt er niet veel.
Oh, wat Koen zegt over __get en __set is overigens niet aan te raden.
We hebben daar in een ander topic ook al eens over gehad, maar we hebben het over PHP én OOP.
Core PHP op zichzelf is absoluut niet OO, en daarnaast zeer los met de variable/property types.
Dat laatste heeft in de meeste gevallen tot gevolg dat, als je controle wilt houden over de inhoud en/of type van een property, dat die property nooit public kan zijn.