[PHP]Reference naar een reference

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Ik probeer een functie te schrijven welke 3 parameters accepteerd:

functie functienaam(reference $object, string $session_name, string $class_name);

Er wordt nu indien nodig een object aangemaakt en opgeslagen in een session variabele bij de naam $session_name. Ik wil nu in reference $object een referentie opslaan naar deze session variabele. Daar komt mijn probleem. Hij accepteerd het niet en geeft NULL terug. Toch moet het een reference worden, anders wordt er elke keer een nieuw object aangemaakt en gaan de gegevens verloren.

Dit is een test code die ik ervoor geschreven heb

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
<?PHP
class SessionTest {
    var $test;
    
    function SessionTest(){
        $this->test = "Deze class wordt opgeslagen in een session";
        return true;
    }
    
    function ChangeVar($text){
        $this->test = $text;
    }
}

function startSession(&$session_run, $session_name, $class_name){
    session_start();
    if(!isset($_SESSION[$session_name])) $_SESSION[$session_name] = new $class_name;
    
    $session_run = &$_SESSION[$session_name];
}

function endSession(){
    if(session_id() != "") session_destroy();
    return true;
}

startSession($login, "test", "SessionTest");

print $login->test."<bR>\n";

$login->ChangeVar("En ook nu is er een andere tekst");

print $login->test;

?>

Het is dus de bedoeling dat "$session_run = &$_SESSION[$session_name];" een werkende reference gaat bevatten. Global werkt namelijk ook niet.

[ Voor 10% gewijzigd door telefoontoestel op 22-05-2004 22:16 ]

telefoontoestel


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Je moet even kijken naar serialize en unserialize ;).

Waarom kun je eigenlijk niet de vars (in dit geval $test) alleen in een value van die sessions stoppen?

Acties:
  • 0 Henk 'm!

  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Ik wil in dit geval het direct benaderbare object in een session bewaren. Dat is niet mogelijk met serialize voor zover ik weet.
Ik wil namelijk dat ik alle variabelen direct kan aanspreken zonder tussenkomst van andere functies. De enige work-around die ik tot nu toe heb kunnen maken is door het schrijven van 2 aparte bestanden welke geinclude worden. Op die manier kan ik de reference parameter omzeilen. Dit staat alleen niet echt mooi.
Het lijkt me dat er een betere oplossing voor moet bestaan die het direct benaderen van het object mogelijk moet maken.

telefoontoestel


Acties:
  • 0 Henk 'm!

Verwijderd

dit is zeker een hele aparte vertoning van php :)
maar na een beetje hobbyen ben ik toch tot een werkende oplossing gekomen:
een tempvariable...

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
<?PHP
class SessionTest {
    var $test;
    
    function SessionTest(){
        $this->test = "Deze class wordt opgeslagen in een session";
        return true;
    }
    
    function ChangeVar($text){
        $this->test = $text;
    }
}

function startSession(&$session_run, $session_name, $class_name){
    session_start();
    if(!isset($_SESSION[$session_name])) $_SESSION[$session_name] = new $class_name;
    
    $tempvar=&$_SESSION[$session_name];
    $session_run = $tempvar;
}

function endSession(){
    if(session_id() != "") session_destroy();
    return true;
}

startSession($login, "test", "SessionTest");

print $login->test."<bR>\n";

$login->ChangeVar("En ook nu is er een andere tekst");

print $login->test;

?> 

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 21-09 10:10

WormLord

Devver

Wat is er trouwens op tegen om het object als functie-waarde terug te geven?
De volgende functie werkt zoals verwacht.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?PHP
// class SessionTest definitie, zie voorgaande voorbeelden

function &startSession($session_name, $class_name){
    // nodig omdat je anders een notice krijgt bij de tweede aanroep
    if(!isset($_SESSION)) session_start();

    if(!isset($_SESSION[$session_name])) $_SESSION[$session_name] = new $class_name;

    return $_SESSION[$session_name];
}

$login1 =& startSession("test", "SessionTest");
$login2 =& startSession("test", "SessionTest");

print $login1->test."<bR>\n";

$login1->ChangeVar("En ook nu is er een andere tekst");

print $login2->test;
?>

Acties:
  • 0 Henk 'm!

  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

telefoontoestel

Maak me gelukkig....Bel!!

Topicstarter
Hey, zo had ik em nog niet bekeken. Thnx. Ik ga er verder mee aan de slag. Ik laat het wel weten als ik toch nog tegen problemen aan loop. :Y)

telefoontoestel

Pagina: 1