2010-11-02 7 views
8

Je reçois ce problème étrange ....Pourquoi global est nul en fonction?

Toute la page a ce code seulement. global $ currentPage; est nul et je ne sais pas pourquoi ...

<?php 
$pager = $_PARAMS["this"]; 
$pages = 5; 
$currentPage = 1; 
$tst="ap"; 
$nearPages = 5; 
//Prologic 
?> 
<div class="pager"> 
<?php 
$nearPagesHalf = ($nearPages - 1)/2; 

drawNumbers(1, 1); 
if ($currentPage - $nearPagesHalf <= 0) { 

} 

drawNumbers($pages, $pages); 
?> 

    <?php 

    function drawNumbers($from, $to) { 
     global $currentPage; 



     for ($i = $from; $i <= $to; $i++) { 

      echo $currentPage; 

      if ($i == $currentPage) { 
    ?> <span class="pageNumbers current"><?= $i ?></span> 

    <?php 
      } else { 
    ?> 
       <a href="#"> 
        <span class="pageNumbers"><?= $i ?></span> 
       </a> 
<?php 
      } 
     } 
?> 
    <?php 
    } 

    function drawDots($from, $to) { 

    } 
    ?> 

</div> 

LE PROBLÈME

echo $currentPage; prints 1 
     function drawNumbers($from, $to) { 
      global $currentPage; 
      echo $currentPage; prints nothing 
+1

Si c'est le seul code d'une page, alors comment cela? $ Pager = $ _PARAMS ["this"]; 'supposé fonctionner? – zerkms

Répondre

17

Je parie que vous exécutez ce code en incluant ce fichier dans une autre fonction.

Vous devez donc marquer comme première occurrence de variable. Btw, les variables globales sont étranges, la façon la plus simple et la plus correcte de transmettre les données à la fonction est d'utiliser les paramètres de la fonction funtction.

+0

Oui, il est évalué ... – GorillaApe

+2

+1 pour "variables globales est bizarre" – Frankie

+2

@Parhs: alors marquer la première variable aussi globale: 'global $ currentPage = 1;'. Mais de toute façon - cette solution est terrible. De même que 'eval()' est terrible. – zerkms

3

Le $currentPage défini au sommet ne vit pas dans l'espace global. Pourquoi ne pas simplement passer le $currentPage comme premier paramètre à la fonction drawNumbers? C'est beaucoup plus propre de cette façon:

drawNumbers($currentPage, 1, 1); 

function drawNumbers($currentPage, $from, $to) { 
// no need define $currentPage here since it's passed 
}