ugrás a tartalomhoz

Mi a legjobb módszer a globális változók függvényből való elérésére?

Anonymous · 2005. Szep. 25. (V), 17.23
Helló!

Lenne egy egyszerű kérdésem:
  1. <?php  
  2. $i=4;  
  3. function kiir()  
  4. {  
  5.    echo $i;  
  6. }  
  7. kiir();  
  8. ?>  
Nyilvánvalóan ez így nem működik (nem írja ki a $i értékét). Én 3 módszert tudok, hogy működjön:
    1. <?php  
    2. $i=4;  
    3. function kiir()  
    4. {  
    5.     global $i;  
    6.     echo $i;  
    7. }  
    8. kiir();  
    9. ?>  
    Ezzel meg tudom változtatni az eredeti (függvényen kívüli) változó értékét.
    1. <?php  
    2. $i=4;  
    3. function kiir()  
    4. {  
    5.     echo $GLOBALS["i"];  
    6. }  
    7. kiir();  
    8. ?>  
    Ezzel is és ha meg is kell, akkor én ezt szeretem használni.
    1. <?php  
    2. $i=4;  
    3. function kiir($i)  
    4. {  
    5.     echo $i;  
    6. }  
    7. kiir($i);  
    8. ?>  
    Így pedig nem. Ezzel az a gondom, hogy mi van akkor ha sok globális változót kell elérnem a függvényből(ekből)? Nem lesz nagy az erőforrás igénye? Főleg, ha paraméterként hosszú sztringet(eket) adok át?

Szóval, a konkrét kérdés az, hogy Ti szerintetek melyik a legjobb megoldás?
Vagy ez szerintetek függ az adott szituációtól?
 
1

Attól függ

ashita · 2005. Szep. 25. (V), 18.11
A tervezestol fugg, ezzel leginkabb magadnak jelzed, hogy a program hogy epul fel. Egy pelda:
  1. <?php  
  2. /*  
  3. A tarolast kezelo objektum. Itt kettot deklaralok belole, hogy kesobb 
  4. ertelme legyen a megfelelot parameterkent atadni  
  5. */  
  6. $dataXMLStorage = new XMLStorage("containers/siteData.dbxml");  
  7. $userXMLStorage = new XMLStorage("containers/userData.dbxml");  
  8.   
  9. /* 
  10. Egy konzolt is deklaralok, ebbol egy darab van, obele ir mindenki 
  11. */  
  12.   
  13. $GLOBALS['console'] = new Console ();  
  14.   
  15. /* 
  16. Es egy osztalydeklaracio, o dolgozik a globalis terbol 
  17. */  
  18.   
  19. class dataHandler extends generalTransformer{  
  20.     
  21.   private $resultTree;  
  22.     
  23.   public function __construct ($XMLStorage,$selectQuery){  
  24.      $this->resultTree = $XMLStorage->getSelectResults($selectQuery);  
  25.      if ($this->resultTree == $XMLStorage->NORESULT){  
  26.         $GLOBALS['console']->AddEntry('WARN_NORMAL',this,'No result');  
  27.      }  
  28.   }  
  29.   
  30.   public function formatResults ($XSLFile){  
  31.     return $this->transformXML($this->resultTree,$XSLFile);  
  32.   }  
  33. }  
  34.   
  35. /* 
  36. Most pedig hasznaljuk a classt 
  37. */  
  38.   
  39. $contentHandler = new dataHandler ($dataXMLStorage,"//content[@id=$reqID]/header");  
  40.   
  41. echo $contentHandler->formatResults('xsl/base-header.xsl');  
  42. echo  $GLOBALS['console']->getOutput();  
  43. ?>  
Remelem ez igy ertheto lett (a pelda nem jo tul sok mindenre, csak egy egyszeru strukturan akartam szemleltetni).
Ha az eroforrasok miatt aggodsz: az igazan eroforras-igenyes dolgok a tenyleges munkavegzo rutinok (kep-atmeretezes, rekurziv loopok, stb.), a parameteratadas ehhez kepest semmi.
Inkabb azon igyekezz, hogy minimalizald a szukseges globalis valtozok szamat.

//

ashita