Avatar billede andreas13_fam Nybegynder
26. juni 2009 - 18:45 Der er 6 kommentarer og
1 løsning

global variabel problem

Kort sagt kan jeg ikke tilgå min system variabel $_SYSTEM i en funktion jeg har.

Den korte version af koden er at jeg har en side her, men funktionen her:
function bookmark($img,$title,$url) {
  global $_SYSTEM;
  $url = str_replace(array('!!title!!','!!url!!'), array($_SYSTEM['meta']['title'],$_SYSTEM['siteadress']), $url);
  echo '
  <div class="bookmark" style="background-image:url(\'/IMG/bookmark/'.$img.'.gif\');"><a href="'.$url.'">'.$title.'</a></div>';
}

som inkluderes fra en class (uddag):
    $_CONTROL = $this->vars;
    $_SYSTEM = array(
                'http'         => array(
                                    'uri' => $_GET['uri'],
                                    'url' => $_GET['system']
                                    ),
                'files'     => array(
                                    'css' => $this->css,
                                    'js' => $this->js,
                                    'xml' => $this->xml
                                    ),
                'path'         => $path,
                'sidebox'     => $this->sidebox,
                'meta'         => $this->meta,
                'menu'         => $this->registry->menu->getxml(),
                'control'     => $this->vars,
                'siteadress'=> $this->registry->url
                    );
                   
    /*** Include the template file ($this->template) ***/
    include (__SITE_PATH .'/'. 'pages' .'/'. '_' . $this->template . '.php');


Tjekker jeg om variabelsen er sat med isset sådan her:
                                            echo 'outdoor: ' . (isset($_SYSTEM) ? 'true' : 'false') .'<br>';
                                            function bookmark($img,$title,$url) {
                                                global $_SYSTEM;
                                                echo 'indoor: ' . (isset($_SYSTEM) ? 'true' : 'false') .'<br>';
                                                $url = str_replace(array('!!title!!','!!url!!'), array($_SYSTEM['meta']['title'],$_SYSTEM['siteadress']), $url);
                                                echo '
                                                <div class="bookmark" style="background-image:url(\'/IMG/bookmark/'.$img.'.gif\');"><a href="'.$url.'">'.$title.'</a></div>';
                                            }

For jeg
outdoor: true
indoor: false
Avatar billede repox Seniormester
26. juni 2009 - 18:49 #1
Hvid du sætter en variabel i et klasse, ligger den jo ikke tilgængelig i det globale scope. Så er den kun tilgængelig fra klassens scope.
Avatar billede erikjacobsen Ekspert
26. juni 2009 - 19:27 #2
Jeg tror ikke du fortæller os det hele. Denne kodestump udskriver 2 gange "true":  ( http://n0p.com/879391.php )

<?php
$_SYSTEM['hejsa']='goddaw';

echo 'outdoor: ' . (isset($_SYSTEM) ? 'true' : 'false') .'<br>';
function bookmark() {
  global $_SYSTEM;
  echo 'indoor: ' . (isset($_SYSTEM) ? 'true' : 'false') .'<br>';
}
bookmark();
?>
Avatar billede andreas13_fam Nybegynder
26. juni 2009 - 20:32 #3
Nej det "hele" er nok også en lidt stor omgang :-)
Hvad med det mest vigtige og en masse mere:

_main.php: http://pastebin.com/f361f2b08 (linje 138)

template.class.php: http://pastebin.com/fd1c3889 (linje 276)

@repox: Jeg angiver ikke variablen som en $this->_SYSTEM men som en $_SYSTEM lige før en include(); Og derved sendes den også til include(). Men tak for forslaget.
http://dk.php.net/manual/en/language.variables.scope.php
Avatar billede erikjacobsen Ekspert
26. juni 2009 - 21:15 #4
Ja, der er nok lidt meget ;)

Men i hvert fald i din
  function show($name) { ... }
bruger du $_SYSTEM uden en global-erklæring i funktionen.
Avatar billede andreas13_fam Nybegynder
26. juni 2009 - 21:38 #5
Tak. Så lærte jeg også noget nyt idag :D
Men ja, jeg syntes ofte at det er et problem at finde et passende forhold, så man for den vigtigste kode med.

repox ligger du et svar, hvis du vil have point.
Avatar billede repox Seniormester
26. juni 2009 - 22:08 #6
Næ, tag du dem selv; jeg løste jo ikke dit problem.
Avatar billede andreas13_fam Nybegynder
28. juni 2009 - 19:27 #7
Nej men når det er erikjacobsen der svar, spørger jeg altid hvis der er andre der har giver forslag ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester