Avatar billede jenslund Juniormester
13. juli 2008 - 18:55 Der er 3 kommentarer

Problem med Global

Jeg kan forstå at global er en dårlig ide i nyere PHP.

Nu har jeg så to stumper kode

      global $HTTP_SERVER_VARS;
      $this->host = $HTTP_SERVER_VARS['HTTP_HOST'];
      $this->path = $HTTP_SERVER_VARS['PHP_SELF'];

og

      global $session_id;
      if (empty($session_id))  { login(); }

... begge fra funktioner.

Er der en der kort men pædagogisk (er ikke den store haj) kan forklare mig, hvilke problemer jeg kan få pga det?

Venligst Jens
Avatar billede jakobdo Ekspert
13. juli 2008 - 19:03 #1
Det dårlige i globals, er at man kan komme til at ændre en variabel, som ikke var tiltænkt.

Nu bruger php godt nok global, så man kommer ikke bare til det.
Men det kunne f.eks. være:

global $moms = 0.25; //25 procent moms, og det skal ikke rettes andre steder.

$pris = $enheds_pris + ($moms * $enheds_pris);
Hvilket vil gå godt nok.
Men lad os så sige følgende:

global $moms = 0.25; //25 procent moms, og det skal ikke rettes andre steder.

function noget_med_moms($input){
  global $moms; //Hvordan man kan komme til dette, vides ikke...
  $moms = 1.40;
}

$pris = $enheds_pris + ($moms * $enheds_pris); //Nu er $moms = 1.40, og ikke som forventet 0.25

Og det drejer sig i bund og grund om scopes.
Avatar billede arne_v Ekspert
13. juli 2008 - 19:10 #2
Jeg har aldrig forstået hvorfor PHP programmører ikke bruger:

define('MOMSPCT', 0.25);

noget mere.
Avatar billede coderdk Praktikant
13. juli 2008 - 19:18 #3
I øvrigt er $HTTP_SERVER_VARS superglobal (den behøves ikke at erklæres, og kan tilgås alle steder fra)... Men benyt $_SERVER i stedet for ;)
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