跨越require_once和函数的PHP变量

时间:2012-07-03 10:59:39

标签: php variables global-variables

我有2个php文件。

的index.php:

<?php
    $counter = 0;
    require_once('temp.php');
    temp();
    echo $counter;
?>

temp.php:

<?php
    function temp() {
            tempHelper();
    }
    function tempHelper() {
            $counter++;
    }
?>

我想打印1而不是0。 我试图将$ counter设置为全局变量而没有成功。

我该怎么办?

3 个答案:

答案 0 :(得分:2)

您的tempHelper函数正在递增本地$counter变量,而不是全局变量。您必须通过两个函数通过引用传递变量,或使用全局变量:

function tempHelper() {
  global $counter;
  $counter++;
}

请注意,对全局变量的依赖可能表明您的应用程序存在设计缺陷。

答案 1 :(得分:1)

我建议不要使用全局变量。使用计数器的课程可能会更好。

class Counter {
    public $counter;

    public function __construct($initial=0) {
        $this->counter = $initial;
    }

    public function increment() {
        $this->counter++;
    }

}

或者只使用没有函数的变量。您的函数似乎是多余的,因为键入$counter++和函数名称一样容易。

答案 2 :(得分:0)

我认为这应该有效:

<?php
    $counter = 0;

    function temp() {
            // global $counter; [edited, no need for that line]
            tempHelper();
    }
    function tempHelper() {
            global $counter;
            $counter++;
    }

    temp();
    echo $counter;
?>

或者您可以将变量作为参数传递或从该函数返回新值。

http://www.simplemachines.org/community/index.php?topic=1602.0

的更多信息