2010-11-02 12 views
8

Ho questo strano problema ...Perché il globale è nullo in funzione?

Tutta la pagina ha solo questo codice. global $ currentPage; è nulla e non so perché ...

<?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> 

IL PROBLEMA

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

Se è l'unico codice di una pagina, come questo '$ pager = $ _PARAMS [" questo "];' dovrebbe funzionare? – zerkms

risposta

17

Scommetto che stai eseguendo questo codice includendo questo file all'interno di un'altra funzione.

Quindi è necessario contrassegnare come global anche la prima variabile.

Btw, le variabili globali sono strane, il modo più semplice e corretto per passare i dati alla funzione è utilizzare i parametri funtction.

+0

Sì è stato valutato ... – GorillaApe

+2

+1 per "le variabili globali sono strani" – Frankie

+2

@Parhs: quindi contrassegna la prima variabile anche globale: 'global $ currentPage = 1;'. Ma comunque - questa soluzione è terribile. Così come 'eval()' è terribile. – zerkms

3

Il $currentPage definita in alto non abita nello global spazio. Perché non passi semplicemente lo $currentPage come primo parametro alla funzione drawNumbers? E 'molto più pulito in questo modo:

drawNumbers($currentPage, 1, 1); 

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