函数内部变量递增值为1

时间:2014-06-10 19:25:54

标签: php scope

编辑:很抱歉,原始代码是迭代,而我试图解决问题,我编辑了代码 This问题开始类似,但这是我遇到的真正问题:

在此代码中:

<?php
    $a = 2:

    function incr(){
        $a++;
    echo $a;
    }

    echo $a;
    incr();
?>

输出为2然后是1,这表示变量$a在函数内初始化为0。服务器是否只知道我使用增量语法将变量初始化为0?

4 个答案:

答案 0 :(得分:6)

$a未定义,然后当您递增时,它会转到1

function incr(){
    $a++; // $a is undefined
    return $a;
}

正如manual中指出的那样:

  

注意:

     

递增/递减运算符仅影响数字和字符串。数组,对象和资源不受影响。 减少NULL值也没有效果,但递增它们会产生1。

您可以使用global,它会按预期返回。

function incr(){
    global $a;
    $a++;
    return $a;
}

答案 1 :(得分:2)

如果您希望在函数中正确递增,则需要将代码更改为:

<?php
    $a = 2:

    function incr($a){
        return $a++;
    }

    echo $a;
    echo incr($a);
?>

$ a inside和函数外部的$ a是代码段中两个完全不同的变量,它们不在同一个范围中。

您可以在此处阅读有关变量范围的内容:http://www.php.net//manual/en/language.variables.scope.php

您也可以使用上一个链接中提到的全局变量,但通常不建议使用它们。

答案 2 :(得分:2)

使用它:

<?php
    $a = 2:

    function incr($a){
        return $a++;
    }

    echo $a;
    echo incr($a);
?>

答案 3 :(得分:1)

在php中,全局变量必须在使用它们的函数内声明为全局变量:

<?php
    $a = 2:

    function incr(){
        global $a;
        $a++;
    }

    echo $a;
    incr();
    echo $a;
?>

不要故意粗鲁,但这在手册中有解释: http://www.php.net/manual/en/language.variables.scope.php

或者通过建议将它们作为变量传递给其他答案。请注意,PHP还允许通过引用传递变量(至少在PHP 5中)。