Avatar billede sjh Nybegynder
15. september 2005 - 20:18 Der er 18 kommentarer og
2 løsninger

global function

Jeg har lavet en funktion som jeg gerne ville at at alt var global i.. hvordan gør jeg det??

lige nu må jeg selv definer dem men det er jo ikke så smart


  function require_exists($strFile) {
    global $def_Root, $def_Title;
    $blnExists = false;
    if (file_exists($def_Root.$strFile)) {
      require_once($def_Root.$strFile);
      $blnExists = true;
    }
    return $blnExists;
  }
Avatar billede horsmark Nybegynder
15. september 2005 - 20:20 #1
$def_Root = ...;
  $def_Title = ...;
  $blnExists = false;
  function require_exists($strFile) {
    global $def_Root, $def_Title;
    $blnExists = false;
    if (file_exists($def_Root.$strFile)) {
      require_once($def_Root.$strFile);
      $blnExists = true;
    }
    return $blnExists;
  }
Avatar billede dennism Nybegynder
15. september 2005 - 20:21 #2
Jeg mener engang at have oprettet et lignende spørgsmål, hvor jeg fik som svar, at man af sikkerhedsmæssige årsager ikke kan globalisere alle variabler.
Man må derfor lave en global til hver variabel.
Avatar billede horsmark Nybegynder
15. september 2005 - 20:23 #3
åhh misforstod *hehe*

lav en klasse

class MyFile{
  var $def_Title = "min titel";
  var $def_Root = "somewhere";
  var $blnExists = false;
  function MyFile(){
  }

  function require_exists($strFile) {
    if (file_exists($this->def_Root.$strFile)) {
      require_once($this->def_Root.$strFile);
      $this->blnExists = true;
    }
    return $blnExists;
  }

}
Avatar billede horsmark Nybegynder
15. september 2005 - 20:24 #4
$FileObject = new MyFile();
$FileObject->require_exists("min_fil_jeg_vil_require")
Avatar billede sjh Nybegynder
15. september 2005 - 20:24 #5
horsmark > ja der er for at ungå -> global $def_Root, $def_Title;

dennism > det lyder ikke godt :(
Avatar billede dennism Nybegynder
15. september 2005 - 20:26 #6
Nej, det kan være ret irriterende, men på den anden side, vil vi jo også gerne skrive sikre scripts :) Så må man jo vælge ;)
Avatar billede sjh Nybegynder
15. september 2005 - 20:26 #7
horsmark > problemet er at jeg også skal kunne bruge de variabeler som er i den fil som include..
Avatar billede sjh Nybegynder
15. september 2005 - 20:28 #8
jo men bruger jeg den her uden for en funktion virker det jo fint nok :(

    if (file_exists($this->def_Root.$strFile)) {
      require_once($this->def_Root.$strFile);
      $this->blnExists = true;
    }
Avatar billede sjh Nybegynder
15. september 2005 - 20:28 #9
den her :D

    if (file_exists($def_Root.$strFile)) {
      require_once($def_Root.$strFile);
    }
Avatar billede horsmark Nybegynder
15. september 2005 - 20:28 #10
well jeg arbejder konstant med klasser der nedarver en "fælles" klasse. Derigennem har alle mine klasser adgang til hinanden og deres data ergo globale sikre variabler
Avatar billede sjh Nybegynder
15. september 2005 - 20:31 #11
det var mere for at gøre det hele lidt nemt så man ikke skulle skrive file_exists() hver gang..
Avatar billede sjh Nybegynder
15. september 2005 - 20:37 #12
hvis man nu ser på ASP's function.. der kan man jo godt læse variabeler som står uden for en function..

dim test

function fun_test()
  her kan jeg godt læse test (dim test)
end function
Avatar billede sjh Nybegynder
15. september 2005 - 20:58 #13
når det ser ikke ud til at det kan lade sig gøre :(

dennism > smider du lige et svar.. så kan i dele..
Avatar billede horsmark Nybegynder
15. september 2005 - 21:02 #14
lad os antage at du har en Common klasse der egentligt blot har til det ene formål at sammensmelte alle dine klasser og en application klasse der er den der altid inkluderes på dine sider. Hvis du så _ALTID_ medsender applikationsklassen som reference når du initierer nye klasser har du altid adgang til alt dit data på tværs.



Class Common(){
var $oApplication; //Dette er en reference til applikationsklassen
function Common( &$oApplication){
  if( !is_null($oApplication){
    $this->oApplication =& $oApplication;
  }
  //Her inkluderes alle de klasser jeg ønsker at have med globalt
    $this->oNisse = new Nisse($oApplication);
  $this->oJul = new Jul($oApplication);
}
}



Class Application extends Common{
function Application(){
    parent::Common($this); //Her sendes referencen til Common så Common ALTID kan kalde Applikatoinsklassen
}
}

Class Nisse extends Common{
  var $navn = "klaus";
    function Nisse (&$oApplication){
    parent::Common($oApplication);
    }

  function getNisseNavn(){
  return $this->navn;
  }
}

Class Jul extends Common{
  var $sne = true;
    function Jul (&$oApplication){
    parent::Common($oApplication);
    }

  function getPakkeInfo(){
  $nissenavn = $this->oApplication->oNisse->getNisseNavn(); //Her spørger klassen "Jul" til klassen "nisse" igennem den fælles klasse "Common"
  if( $nissenavn == "klaus") return "Pakkerne leveres af ".$nissenavn;
  }
}

Well here goes.

$oApp = new Application();
print $oApp->oJul->getPakkeInfo();
Avatar billede sjh Nybegynder
15. september 2005 - 21:12 #15
horsmark > Ja nu må jeg jo nok indrømme at jeg ikke lige har så meget styr på class i php..

Jeg tror bare jeg får lavet noget jeg ikke kan finde ud af når jeg engang skal opdater på det igen :D

det virker ikke smart i mine øjne.. men det er det sikkert.. jeg trot bare jeg må bruge global til dem jeg skal overfør.. det har jeg mere styr på.. :D
Avatar billede horsmark Nybegynder
15. september 2005 - 21:20 #16
allrighty the easy way er denne

define("GLOBAL_ROOTFILE", "/et/eller/andet/sted/filerne/er/");

function testNisseNavn($myFileName){
require_once (GLOBAL_ROOT . $myFileName);
}
Avatar billede horsmark Nybegynder
15. september 2005 - 21:21 #17
og så kan dine inklude filer bruge af disse definede GLOBALS ligeså :-)
Avatar billede sjh Nybegynder
15. september 2005 - 21:22 #18
Ja det fik jeg også lige selv se at men kunne bruger den også selv til min sql..

  define("HOST", "localhost");
  define("USER", "root");
  define("PASS", "");
  define("DB", "xxxxxx_dk");
Avatar billede sjh Nybegynder
15. september 2005 - 21:28 #19
men jeg tror nu alivel jeg bruger global..
Avatar billede sjh Nybegynder
20. september 2005 - 04:55 #20
tak for hjælpen..
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