2010-11-02 7 views
8

Me sale este extraño problema ....¿Por qué global es nulo en la función?

Toda la página tiene este código solamente. global $ currentPage; es nula y no sé por qué ...

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

EL PROBLEMA

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

Si es el único código de una página, ¿cómo se supone que '$ pager = $ _PARAMS [" this "];' done work? – zerkms

Respuesta

17

apuesto a que está ejecutando el código mediante la inclusión de este archivo dentro de otra función.

Por lo tanto, debe marcar como global la primera ocurrencia variable también.

Por cierto, las variables globales son raras, la manera más simple y correcta de pasar los datos a la función es usar parámetros de funtcción.

+0

Sí, se evadió ... – GorillaApe

+2

+1 para "variables globales es extraño" – Frankie

+2

@Parhs: a continuación, marque la primera variable como global también: 'global $ currentPage = 1;'. Pero de todos modos, esta solución es terrible. Además de 'eval()' es terrible. – zerkms

3

El $currentPage definido en la parte superior no vive en global espacio. ¿Por qué no pasa el $currentPage como primer parámetro de la función drawNumbers? Es mucho más limpio de esa manera:

drawNumbers($currentPage, 1, 1); 

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