Scope van variabele

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wietse Sas

Wietse Sas

07/07/2004 21:47:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

26/11/2024 23:31:31
 
B a s
Beheerder

B a s

07/07/2004 23:39:00
Quote Anchor link
probeer eens $_SESSION['settings'] = $settings;

en gebruik $_SESSION['settings'] overal ipv $_SESSION('settings') :)
 
Wietse Sas

Wietse Sas

08/07/2004 00:27:00
Quote Anchor link
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";
 
B a s
Beheerder

B a s

08/07/2004 08:52:00
Quote Anchor link
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?
 
Wietse Sas

Wietse Sas

08/07/2004 12:43:00
Quote Anchor link
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...
 
Mitch X

Mitch X

08/07/2004 12:44:00
Quote Anchor link
Bassiej volgens mij kan het wel hoor.
Een array is gewo0n een var met meerdere waarden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
    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
 
Wietse Sas

Wietse Sas

08/07/2004 12:52:00
Quote Anchor link
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?
 
Wietse Sas

Wietse Sas

08/07/2004 12:56:00
Quote Anchor link
Voor wat staat $classes['abc']?
 
B a s
Beheerder

B a s

08/07/2004 13:02:00
Quote Anchor link
Je kunt $a dan gewoon aanroepen met $a als ik mij niet vergis :/
 
Wietse Sas

Wietse Sas

08/07/2004 13:15:00
Quote Anchor link
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...
 
Wietse Sas

Wietse Sas

08/07/2004 15:28:00
Quote Anchor link
Heb het eindelijk gevonden, toch bedankt voor de hulp

Wietse
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.