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:

<?php
$i=4;
function kiir()
{
   echo $i;
}
kiir();
?>
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
    $i=4;
    function kiir()
    {
        global $i;
        echo $i;
    }
    kiir();
    ?>
    
    Ezzel meg tudom változtatni az eredeti (függvényen kívüli) változó értékét.
  2. 
    <?php
    $i=4;
    function kiir()
    {
        echo $GLOBALS["i"];
    }
    kiir();
    ?>
    
    Ezzel is és ha meg is kell, akkor én ezt szeretem használni.
  3. 
    <?php
    $i=4;
    function kiir($i)
    {
        echo $i;
    }
    kiir($i);
    ?>
    
    Í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:

<?php
/* 
A tarolast kezelo objektum. Itt kettot deklaralok belole, hogy kesobb
ertelme legyen a megfelelot parameterkent atadni 
*/
$dataXMLStorage = new XMLStorage("containers/siteData.dbxml");
$userXMLStorage = new XMLStorage("containers/userData.dbxml");

/*
Egy konzolt is deklaralok, ebbol egy darab van, obele ir mindenki
*/

$GLOBALS['console'] = new Console ();

/*
Es egy osztalydeklaracio, o dolgozik a globalis terbol
*/

class dataHandler extends generalTransformer{
  
  private $resultTree;
  
  public function __construct ($XMLStorage,$selectQuery){
     $this->resultTree = $XMLStorage->getSelectResults($selectQuery);
     if ($this->resultTree == $XMLStorage->NORESULT){
        $GLOBALS['console']->AddEntry('WARN_NORMAL',this,'No result');
     }
  }

  public function formatResults ($XSLFile){
    return $this->transformXML($this->resultTree,$XSLFile);
  }
}

/*
Most pedig hasznaljuk a classt
*/

$contentHandler = new dataHandler ($dataXMLStorage,"//content[@id=$reqID]/header");

echo $contentHandler->formatResults('xsl/base-header.xsl');
echo  $GLOBALS['console']->getOutput();
?>
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