2010-11-02 48 views
8

我得到這個奇怪的問題....爲什麼全局函數爲null?

所有的頁面只有這個代碼。全球$ currentPage;全球$ ;爲空,我不知道爲什麼...

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

的問題

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

如果它是一個頁面的唯一代碼,那麼這個'$ pager = $ _PARAMS [「this」];'應該如何工作? – zerkms 2010-11-02 04:01:26

回答

17

我敢打賭,你通過將此文件包含在另一個函數中執行此代碼。

因此,您還需要標記爲global第一個變量發生。

順便說一下,全局變量很奇怪,將數據傳遞給函數的更簡單更正確的方法是使用funtction參數。

+0

是的,它被撤銷... – GorillaApe 2010-11-02 04:03:08

+2

+1「全局變量很奇怪」 – Frankie 2010-11-02 04:03:31

+2

@Parhs:然後將第一個變量標記爲全局:'global $ currentPage = 1;'。但無論如何 - 這個解決方案是可怕的。和'eval()'一樣糟糕。 – zerkms 2010-11-02 04:04:48

3

頂部定義不居住在global空間$currentPage。爲什麼不通過$currentPage作爲drawNumbers函數的第一個參數?這是更清潔的方式:

drawNumbers($currentPage, 1, 1); 

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