Scope van variabele
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
en gebruik $_SESSION['settings'] overal ipv $_SESSION('settings') :)
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";
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?
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...
Een array is gewo0n een var met meerdere waarden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
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;
?>
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
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 :/
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...
Wietse