在此代码中:
<?php
$a = 2:
function incr(){
$a++;
echo $a;
}
echo $a;
incr();
?>
输出为2然后是1,这表示变量$a
在函数内初始化为0。服务器是否只知道我使用增量语法将变量初始化为0?
答案 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中)。