Php 为什么全局函数为空?

Php 为什么全局函数为空?,php,Php,我有一个奇怪的问题 所有页面仅包含此代码。 全局$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

我有一个奇怪的问题

所有页面仅包含此代码。 全局$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>

顶部定义的
$currentPage
不在
全局
空间中。为什么不将
$currentPage
作为第一个参数传递给drawNumber函数呢?这样更干净:

drawNumbers( $currentPage, 1, 1 );

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

我打赌您是通过将此文件包含在另一个函数中来执行此代码的

因此,您也需要将第一个变量的出现标记为
global


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

如果它是一页中唯一的代码,那么这个
$pager=$\u PARAMS[“this”]
是否应该工作?@Parhs:然后将第一个变量也标记为全局变量:
global$currentPage=1。但无论如何,这个解决方案很糟糕。还有
eval()
很糟糕。我也讨厌全局,但我不得不使用的框架是由许多全局组成的@执行php时,每个页面的时钟都被评估!那太糟糕了吗?我不会做那样的事,但我说不出确切的原因bad@Parhs当前位置非常糟糕;-)它非常慢,很难维护/develope/debug/etcGlobal很奇怪,但它的存在当然是有原因的。在这种情况下,我无法使用参数访问全局变量以将其传递到系统执行的其余部分,除非我放弃设计模式和良好实践。唯一的解决方案是全局var声明。
drawNumbers( $currentPage, 1, 1 );

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