[PHP] Globale variablen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[kleine beschrijving]

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
generate_pdf.php >>

  $PDF = ""

  function GenerateReport1(&$resultaat, $vis)
  {
    global $working_dir, $PDF;

    // doe dingen met die $PDF (wordt een class-object etc)
  }

  function GenerateReport2(&$resultaat, $vis)
  {
    global $working_dir, $PDF;

    // maar HIER is die $PDF trug NULL
  }


generate_rapport.php >>
  if ( $output == "pdf" )
    require_once("generate_pdf.php");
  else...

  // ... Doe een aantal bewerkingen zodat $resultaat wordt gegenereerd
  GenerateReport1 ( $resultaat, $vis );

  // ... Doe een aantal dingen voor $resultaat (andere) te genereren
  GenerateReport2 ( $resultaat, $vis );


[einde kleine beschrijving]

[vraag]
Waarom is $PDF in de "GenerateReport2"-functie NULL? Terwijl ik die in de 1e toch gemaakt heb (op het einde van 'GenerateReport1' is die $PDF NIET NULL!!), maar zodra ik terug kom in 'generate_rapport.php' is die $PDF toch trug NULL geworden.

De eenvoudige oplossing is &$PDF meegeven in de parameter-lijst, maar dat kan ik niet maken, anders moet ik aan iedere persoon die een rapport genereerd zeggen dat te veranderen. Ik dacht van als ge iets 'global' zet, dat ge die global var veranderd, en dan de 2e keer dat ge die gebruikt dat ge de veranderde var gebruikt
[/vraag]

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
heel ruwe oplossing gevonden :x
op einde van GenerateReport1:
$GLOBALS["PDF"] = $PDF;

en dat is het :x Vindt ik vrij grof (omdat ge een kopie maakt, right?). En dat duurt toch wel een second of 4 :x

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Behalve dat het een lelijke oplossing is en dat het volgens mij gewoon zou moeten werken (maar ik heb niet zoveel verstand van PHP :P), zou je natuurlijk ook met een reference kunnen werken

in het begin van je functie:
PHP:
1
2
3
4
5
6
7
8
9
10
  function GenerateReport1(&$resultaat, $vis) 
  { 
    global $working_dir;

    $PDF = &$GLOBALS["PDF"];
    // vanaf nu wijst $PDF gewoon naar de entry in de global table,
    // en zal er dus ook niets gekopieerd worden

    // doe dingen met die $PDF (wordt een class-object etc) 
  }

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Euh... waarom gebruik je dan niet gewoon $GLOBALS["PDF"] als variabele?

Maar is ie in die tweede functie NULL of "" :? Das nogal een verschil namelijk.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Je probleem is dat "" (een String) != 'een class-object'. Waneer je bij de $PDF al gelijk iets als $PDF = new class-object; doet zal het een stuk beter werken denk ik.

[ Voor 3% gewijzigd door Janoz op 10-06-2003 16:48 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
janoz> nee, blijft hetzelfde (omdat het eerste dat ik doe in report1 is die $PDF een nieuw classe object van maken)
oisyn> zal ik eens proberen, schijnt een pak schoner te zijn van aanpak.

[ Voor 33% gewijzigd door Verwijderd op 10-06-2003 16:52 ]


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

.oisyn schreef op 10 June 2003 @ 16:48:
Behalve dat het een lelijke oplossing is en dat het volgens mij gewoon zou moeten werken (maar ik heb niet zoveel verstand van PHP :P), zou je natuurlijk ook met een reference kunnen werken

in het begin van je functie:
PHP:
1
2
3
4
5
6
7
8
9
10
  function GenerateReport1(&$resultaat, $vis) 
  { 
    global $working_dir;

    $PDF = &$GLOBALS["PDF"];
    // vanaf nu wijst $PDF gewoon naar de entry in de global table,
    // en zal er dus ook niets gekopieerd worden

    // doe dingen met die $PDF (wordt een class-object etc) 
  }
Doe dan dit :P :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function GenerateReport1(
    &$resultaat,
    $vis,
    $working_dir="/path/to/default/dir",
    &$PDF) 
  {


    // doe dingen met die $PDF (wordt een class-object etc) 

    return $PDF; // object te gebruiken in functie 2
  }
$PDF=GenerateReport1($resultaat,'vis',$working_dir,$GLOBALS["PDF"]);

[ Voor 13% gewijzigd door RedRose op 10-06-2003 17:05 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 10 June 2003 @ 16:51:
janoz> nee, blijft hetzelfde (omdat het eerste dat ik doe in report1 is die $PDF een nieuw classe object van maken)
Ik bedoel ook niet binnen de functies, maar erbuiten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

RedRose schreef op 10 June 2003 @ 17:01:
Doe dan dit :P :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function GenerateReport1(
    &$resultaat,
    $vis,
    $working_dir="/path/to/default/dir",
    &$PDF) 
  {
    // vanaf nu wijst $PDF gewoon naar de entry in de global table,
    // en zal er dus ook niets gekopieerd worden

    // doe dingen met die $PDF (wordt een class-object etc) 
  }
GenerateReport1($resultaat,'vis',$working_dir,$GLOBALS["PDF"]);
dat lijkt me ook onzinnige code, bovendien wilde de TS geen extra argumenten introduceren. Die $GLOBALS lijkt me een beetje nutteloos, omdat je daar toch al in global scope werkt, en je dus net zo goed $PDF mee kunt geven

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

.oisyn schreef op 10 juni 2003 @ 17:05:
[...]


dat lijkt me ook onzinnige code, bovendien wilde de TS geen extra argumenten introduceren. Die $GLOBALS lijkt me een beetje nutteloos, omdat je daar toch al in global scope werkt, en je dus net zo goed $PDF mee kunt geven
Je hebt helemaal gelijk, ik zag het net pas. Volgens mij is mijn ge-editte post in principe wel correct. Waarom zou je geen extra argumenten willen introduceren?

.edit: Jullie mods lezen ook veel te goed ;)

[ Voor 7% gewijzigd door RedRose op 10-06-2003 17:19 . Reden: achterlijke code + in principe toegevoegd ]

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
redrose > dit kan ik niet doen, omdat ik insta voor pdfs te genereren, en ik kan niets veranderen aan die functie header zonder gegronde reden. Maw -> Ik heb het opgelost gekregen met globals (jakkes :p) maar het werkt! dat is 't voornaamste

janoz > mja, wat jij stelt is dat ik "$PDF = new pdf_class;" doe ?? Maar wat ik deed was $PDF = new string(""); eigenlijk, dus een class string-object maken. Maar die 'reset' em elke functie. Met die globals heb ik het opgelost gekregen ;) dat is't belangrijkste...

Thx mannen! (ge moogt dees locken :) )
Pagina: 1