Avatar billede kernelx Juniormester
29. januar 2004 - 10:07 Der er 10 kommentarer og
1 løsning

variabler som altid er global?

<?
$var1 = "et eller andet";
$var2 = "en eller to";

function test1 ()
{
    global $var1, $var2;
    echo $var1." ".$var2."<br>test2";
}

function test2 ()
{
    global $var1, $var2;
    echo $var1." ".$var2."<br>test2";
}
?>

mit problem er, at der i et projekt er mange flere globale variabler, end i dette eksempel, hvor der kun er $var1 og $var2. Og hver gang naar jeg skriver en ny funktion, saa skal jeg saette alle disse variabler global igen og igen.

er det ikke paa en eller anden maade muligt, at saette $var1 og $var2 global fra starten af, saadan, at man ikke er noedt til at saette dem globale i funktionen?

<?
setglobal $var1 = "et eller andet";
setglobal $var2 = "en eller to";

function test1 ()
{
    echo $var1." ".$var2."<br>test2";
}

function test2 ()
{
    echo $var1." ".$var2."<br>test2";
}
?>

findes der i php en funktion, som kan finde ud af det, som i eksemplet ovenover blev erstattet med setglobal <---?
Avatar billede erikjacobsen Ekspert
29. januar 2004 - 10:22 #1
Det er normalt dårlig programmeringsskik at bruge alt for mange globale variabler.
Overvej at bruge parametre til dine funktioner, eller lave klasser og objekter.
En anden måde jeg kan komme på er ikke meget anderledes end den du har allerede:

<?

  $var1='flyvefisk';

  print "Udenfor er der $var1<br>\n";

  function f() {
    $var2=$GLOBALS['var1'];
    print "Indenfor er der $var2<br>\n";
  }

  f();

?>
Avatar billede sukos Juniormester
29. januar 2004 - 11:24 #2
Man kan vel også putte dem i en funktion?
<?php

function get_globals () {
return global $var1, $var2;
}

function ny() {
get_globals();
........................
}
?>
Avatar billede erikjacobsen Ekspert
29. januar 2004 - 11:28 #3
Er det noget du har prøvet, sukos, eller noget du bare gætter dig frem til?
Avatar billede sukos Juniormester
29. januar 2004 - 11:33 #4
:O)
Ikke prøvet!!! (derfor også spm.)
Avatar billede erikjacobsen Ekspert
29. januar 2004 - 11:37 #5
Skal vi ud i outrerede løsninger så kan man lave en

    global.inc
    ----------
    global $var1,$var2,$simpelthenbaredemallesammen;

og

    function nyw() {
      include("global.inc");
      ...
    }

Det er dog utestet. Men programmeringsstilen er ikke noget at råbe hurra for.
Det er eller vil udvikle sig til uoverskuelig spaghetti-kode, som ingen vil
røre med en ildtang.
Avatar billede jakoba Nybegynder
29. januar 2004 - 13:39 #6
Helt enig med erikjacobsen. Hvis det du ønsker lykkedes ville du være tilbage i et fladt adresserum hvor alle navne er sideordnet. Og hvor enhver programmeringsfejl hvorsomhelst kan have uoverskuelige konsekvenser de særeste steder.

Mon ikke php's objekter kunne være nyttige her, til at gruppere dine variable og sikre at de bliver brugt på en organiseret måde.
http://dk.php.net/manual/en/language.oop.php
Avatar billede kernelx Juniormester
11. juni 2004 - 11:31 #7
hvorfor er der ingen, som skriver tingene som svar?
Avatar billede kernelx Juniormester
11. januar 2005 - 07:44 #8
hallo???
er der ingen som vil have points?
Avatar billede erikjacobsen Ekspert
11. januar 2005 - 09:15 #9
Jeg samler ikke på point, tak.
Avatar billede kernelx Juniormester
20. januar 2005 - 22:05 #10
ok, så lukker jeg
Avatar billede 3xm Nybegynder
20. januar 2005 - 22:08 #11
jeg har løst et lign. problem ved at have alle mine globale variabler samlet i 1 array.
så er det kun arrayets variabelnavn der skal sættes globalt. ligemeget hvor mange ting man fylder i det.

=)
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