Hallo,

Ik ben bezig met een website te maken die door middel van classes is opgebouwd.
Ik gebruik daar in ook een pagina systeem om pagina's te includen.

Nu heb ik een klein probleempje wat ik niet opgelost krijg.
Als eerste maak ik op de index een nieuwe classe Settings aan. Hierin moeten variabelen worden opgeslagen.

Ik wil vanuit de index en pagina's die geinclude zijn deze waarde kunnen opvragen of aanpassen.
Ik heb deze code:


	$Settings = new Settings();

	$PageLoad = new Index();
	$PageLoad->SetMenuId();
	$PageLoad->PageStart();
	$PageLoad->PageLoad();
	$PageLoad->PageEnd();


Als ik in de PageStart() functie een variabele vul ($Settings->var1 = "gevuld") dan kan ik deze in dezelfde functie ook aanroepen (echo $Settings->var1;).

Als ik deze echter in een andere functie wil aanroepen blijft hij leeg.

In PageLoad(); include ik andere pagina's. Hier wil ik ook doormiddel van echo $Settings->var1; de waarde kunnen aanroepen.

Is dit mogelijk, zoja wat doe ik fout?

Bedankt
Is het registry pattern misschien een oplossing voor je?


<?php
class Registry
{
    private $data = array();

    public function __set($key, $value)
    {
        $this->data[$key] = $value;
    }

    public function __get($key)
    {
        return $this->data[$key];
    }
}
?>
Bedankt,

Ik had eigenlijk al iets soortgelijks gevonden maar ook dat wil helaas niet werken.

Wat ik nu doe met jouw code:


$registry = new Registry();

public function PageStart()
{
    $registry->var1 = "waarde";
}

public function PageLoad()
{
    echo $registry->var1;
}


maar in PageLoad() blijft hij leeg. Echo ik hem in PageStart, dan laat hij hem wel gevuld zien.

Ik moet hem toch in andere functies (en daarin geinclude pagina's) ook kunnen aanroepen ofniet?

Bedankt
Je moet de registry als "centrale opslag" op een of andere manier toegankelijk maken.
Dat kan bijvoorbeeld door de registry mee te geven in de constructor van klassen die de registry nodig hebben. Of, zo je wilt, door het gebruiken van de registry verplicht te stellen:


<?php
class Foo
{
    public function __construct(Registry $registry)
    {
        // <...>
    }
}
?>
Of je maakt van de Settings een static class. Dan kun je er ook overal bij

<?php
abstract class Settings
{
protected static $data;

public static function set($var, $val)
{
self::$data[$var] = $val;
}

public static function get($var)
{
if (self::has($var))
return self::$data[$var];

return null;
}

public static function has($var)
{
return isset(self::$data[$var]);
}
}

Settings::set('test', 'waarde');

var_dump(Settings::get('test'));
var_dump(Settings::has('test'));
var_dump(Settings::has('nonExistant'));

Reageren