为什么全局函数为空?

Gor*_*Ape 9 php

我遇到了这个奇怪的问题....

所有页面都只有这个代码.global $ currentPage; 是null,我不知道为什么......

<?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>
Run Code Online (Sandbox Code Playgroud)

问题

echo $currentPage; prints 1 
        function drawNumbers($from, $to) {
            global $currentPage;
           echo $currentPage; prints nothing
Run Code Online (Sandbox Code Playgroud)

zer*_*kms 22

我打赌你通过在另一个函数中包含这个文件来执行这个代码.

所以你需要标记为global第一个变量出现.

顺便说一句,全局变量很奇怪,将数据传递给函数的更简单和正确的方法是使用伪指令参数.

  • @Parhs:然后将第一个变量标记为全局变量:`global $ currentPage = 1;`.但无论如何 - 这个解决方案很糟糕.和'eval()一样可怕. (2认同)

Luk*_*uke 5

$currentPage顶部定义的内容并不存在于global空间中。为什么不将 作为$currentPage第一个参数传递给drawNumbers 函数呢?这样就干净多了:

drawNumbers( $currentPage, 1, 1 );

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