Ok, mijn probleem is iets concreter nu...

Ik heb een class, een session variabele die verwijst naar die class, en een global variabele die eigenlijk dezelfde is als de session variabele, maar dat werkt gemakkelijker.

In code is dit dus:

#de class
class all_settings { /*hier de code in de class*/ }

#de global variabele
global $settings;

#Nakijken of de session_variabele al een instancie van de class is of dat het de eerste keer is dat deze code wordt uitgevoerd in de hele sessie
if (is_a($_SESSION('settings')) == false) {
$_SESSION('settings') = new all_settings;
}

#de global variabele de waarde van de sessievariabele geven
$settings = $_SESSION('settings');

Op dit moment kan ik de variabele $settings gebruiken.
Op het einde van de pagina geef ik de waarde van de global variabele terug aan de sessie variabele, zodat de veranderingen gedaan met de global variabele bewaard blijven gedurende de sessie. In code:

$_SESSION('settings') = $settings;

Mijn probleem is nu:
Als ik nu sommige variabelen uit de class die de global variabele voorstelt opvraag krijg ik geen waarden terug...

In code:
$settings->property1 = 5;
.....code.....
echo($settings->property1);

Is dit een probleem i.v.m de scope van variabelen (ik werk ook wel met een paar require(), weet niet echt of dat de scope van variabelen daar veranderd ofzo) of zit ik ergens anders fout.

Dank bij voorbaat
probeer eens $_SESSION['settings'] = $settings;

en gebruik $_SESSION['settings'] overal ipv $_SESSION('settings') :)
ja, k, die () was puur vergissinkje, in mijn code staat dat als []. Had het niet ge-copy-pasted, maar rap ingetypt... :)

Wat je in de eerste regel zegt, is dat ook over de () []?

Kan ik eigenlijk iets van die class aanspreken door de superglobal $_SESSION te gebruiken?

voorbeeld: $_SESSION['settings']->title = "Titel";
vlgns mij kan zoiets niet.. session is een array en niet een object zoals jij het wil gebruiken..

maar wat is je probleem precies?? global vars die je in de class gedefineerd hebt (dit doe je met var $var; trouwens ipv global $var; voor als je dit toevallig fout hebt) geven bij het opvragen van de class niets terug?
Inderdaad, ik krijg geen gegevens terug.

In de class heb ik de vars zo gedeclareerd:

class a {
var $a;
var $b;

....
}

Nu, ik wil die gegevens bijhouden gedurende de hele sessie van die gebruiker, maar dat lijkt mij niet te lukken...
Bassiej volgens mij kan het wel hoor.
Een array is gewo0n een var met meerdere waarden:
<?
class hello_world
{
function hello_world()
{
echo "Hello world!";
}
}

class welcome
{
function welcome()
{
echo "Welcome!";
}
}

class byebye
{
function byebye()
{
echo "Tot de volgende keer!";
}
}

$classes['hw'] = new hello_world;
$classes['we'] = new welcome;
$classes['bye'] = new byebye;

$_SESSION['hw'] = new hello_world;
$_SESSION['we'] = new welcome;
$_SESSION['bye'] = new byebye;

$_SESSION['cls']['hw'] = new hello_world;
$_SESSION['cls']['we'] = new welcome;
$_SESSION['cls']['bye'] = new byebye;
?>
Voorbeeld op http://sh4d3h.ath.cx/carray.php
ja, ok, daar was ik wel. Maar hoe kan ik nu de gegevens van die global variabele verkrijgen.

class a
{
var $a;

function a()
{
$a = "hello world";
}

function print_a()
{
echo($a);
}
}


global $b;
$b = new a;
$b->a = "Dag wereld";

Hoe wordt dit dan gedaan met de global variabele $_SESSION?

$_SESSION['b'] = new a;
$_SESSION['b']->a = "Dag wereld";

Denk niet dat dat correct is hé, iemand een idee?
Voor wat staat $classes['abc']?
Je kunt $a dan gewoon aanroepen met $a als ik mij niet vergis :/
ahzo, maar hoe houd ik die waarde dan bij in mijn sessie?

Het kan eventueel ook zij dat mijn fout zit in het initializeren van de sessievariabele als object.
Ik denk dat de sessievariabele elke keer opnieuw geset wordt op new classname.
ik gebruik is_a( object, classname ) om na te gaan of de sessievariabele al is ingesteld op een instancie van de class.

uit mijn code:

if (is_a($_SESSION['settings'], "cls_settings") == false)
{ $_SESSION['settings'] = new cls_settings; }

Ik kan maar niet vinden waar ik verkeerd zit...
Heb het eindelijk gevonden, toch bedankt voor de hulp

Wietse

Reageren